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

Langage SQL Discussion :

Pb: Update table A à partir de table B via table C


Sujet :

Langage SQL

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 41
    Points : 26
    Points
    26
    Par défaut Pb: Update table A à partir de table B via table C
    Bonjour à tous

    Je travaille sur une base Oracle 10g et je rencontre le pb suivant sur une requête SQL:

    J'ai une table tab_A avec une clé PK_A unique et une colonne col_A que je souhaite mettre à jour.

    J'ai une autre table tab_B avec une clé PK_B unique et une colonne col_B qui contient les valeurs à récupérer sur la table tab_A.

    J'ai une 3ème table tab_C qui fait la liaison entre les 2 1ères avec une colonne FK_A et une autre colonne FK_B. Je précise que cette table peut contenir des lignes avec une même FK_B pour des FK_A différentes, c'est sans doute cela qui fait planter ma requête.

    J'obtiens un message:
    ORA-01427 : sous-interrogation ramenant un enregistrement de plus de 1 ligne

    sur la requête suivante:
    UPDATE tab_A
    SET tab_A.col_A =
    SELECT tab_B.colB
    FROM tab_C, tab_B
    WHERE tab_A.PK_A = tab_C.FK_A
    AND tab_C.FK_B = tab_B.PK_B

    Si quelqu'un a une idée, merci d'avance...

  2. #2
    Membre éprouvé Avatar de Mathusalem
    Profil pro
    IT moa
    Inscrit en
    Décembre 2003
    Messages
    1 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : IT moa

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 008
    Points : 1 067
    Points
    1 067
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    UPDATE tab_A
    SET tab_A.col_A = tab_B.colB
    FROM tab_C, tab_B
    WHERE tab_A.PK_A = tab_C.FK_A
    AND tab_C.FK_B = tab_B.PK_B

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 41
    Points : 26
    Points
    26
    Par défaut
    Tu es sûr de la syntaxe, j'obtiens un message:
    ORA-00933 : la commande SQL ne se termine pas correctement sur le FROM

  4. #4
    Expert confirmé Avatar de Cybher
    Homme Profil pro
    Consultant réseaux et sécurité
    Inscrit en
    Mai 2005
    Messages
    3 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Consultant réseaux et sécurité
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 281
    Points : 4 644
    Points
    4 644
    Par défaut
    comme le dit le message, le probleme vient du fait que ta requete :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT tab_B.colB
    FROM tab_C, tab_B
    WHERE tab_A.PK_A = tab_C.FK_A
    AND tab_C.FK_B = tab_B.PK_B
    te ramene plus de 1ligne
    donc il y a un probleme pour savoir quelle valeur donnée à col_A

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 41
    Points : 26
    Points
    26
    Par défaut
    Effectivement, il faut que j'indique quelle ligne prendre.

    Je vais essayer avec un min ou une jointure externe.

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 41
    Points : 26
    Points
    26
    Par défaut
    Il y a aussi des lignes avec une même FK_A pour des FK_B différentes.
    Il faut faire un choix: je prend le max de col_B.

    La requête suivante fonctionne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    UPDATE TAB_A
    SET TAB_A.col_A =
    ( SELECT MAX(TAB_B.col_B)
      FROM TAB_B left outer join TAB_C ON TAB_B.PK_B = TAB_C.FK_B
      WHERE TAB_A.PK_A = TAB_C.FK_A )

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

Discussions similaires

  1. Update d'une table a partir d'un select recursif
    Par olibara dans le forum Langage SQL
    Réponses: 1
    Dernier message: 17/05/2008, 09h44
  2. Réponses: 1
    Dernier message: 04/10/2007, 16h35
  3. Update de Pivot Table a partir d'une autre feuille
    Par Henricoo dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 30/05/2007, 14h36
  4. Update d'une table a partir d'une autre table
    Par Yannis06 dans le forum Oracle
    Réponses: 6
    Dernier message: 11/08/2005, 11h32
  5. Réponses: 4
    Dernier message: 26/08/2004, 08h01

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