IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SQL Oracle Discussion :

Problème avec un update


Sujet :

SQL Oracle

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 64
    Par défaut Problème avec un update
    Bonjour
    J'ai une table T1 (contenu) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    DATEACHAT                 NOM                  ALIMENT    NB                     
    ------------------------- -------------------- ---------- ---------------------- 
    01/01/09                  DUPONT               ORANGE     10                     
    05/01/09                  DUPONT               ORANGE     0
    une table t2 (contenu) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    NOM                  ALIMENT    NB                     
    -------------------- ---------- ---------------------- 
    DUPONT               ORANGE     0                      
    DUPONT               BANANE     0                      
    MARTIN               ORANGE     0                      
    MARTIN               BANANE     0
    - Ma requete
    update T2
    set t2.nb = (select count(*) from t1 where t1.NB != 0
    and t1.nom = t2.nom and t1.ALIMENT = t2.aliment
    group by nom,aliment)

    Je veux compter le nbre de fois ou telle personne a acheté tel aliment et le mettre à jour dans ma table T2 (cette dernière étant initialisée avec tous les agrégats possibles)

    et le update fait cela
    *Action:
    4 rows updated

    DUPONT ORANGE 1
    DUPONT BANANE (null)
    MARTIN ORANGE (null)
    MARTIN BANANE (null)

    Moi je ne voudrais mettre à jour que la ligne concernée soit
    DUPONT ORANGE 1 ==> 1 row updated

    Quelqu'un a t'il une idée ?
    Merci d'avance

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Il suffit de rajouter un where exists à votre update.
    C'est une règle d'or, n'updater que les lignes dont on a besoin :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    update T2 
    set t2.nb = (select count(*) from t1 where t1.NB != 0
                 and t1.nom = t2.nom and t1.ALIMENT = t2.aliment)
    where exists (select null from t1 where t1.NB != 0
                  and t1.nom = t2.nom and t1.ALIMENT = t2.aliment)
    D'ailleurs votre group by n'est pas nécessaire puisque vous précisez déjà nom et aliment en relation entre t1 et t2.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] problème avec un update
    Par soork dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 05/04/2007, 12h22
  2. [MySQL] Problème avec un update
    Par leloup84 dans le forum PHP & Base de données
    Réponses: 22
    Dernier message: 21/09/2006, 10h09
  3. Problème avec un update et un champs
    Par kornmuse90 dans le forum Requêtes
    Réponses: 3
    Dernier message: 27/03/2006, 15h55
  4. [VB6] Problème avec requête Update
    Par bb62 dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 02/02/2006, 03h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo