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 :

Requête UPDATE avec jointure


Sujet :

SQL Oracle

  1. #1
    Membre à l'essai
    Inscrit en
    Mai 2002
    Messages
    37
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Mai 2002
    Messages : 37
    Points : 17
    Points
    17
    Par défaut Requête UPDATE avec jointure
    Bonjour,

    Je souhaite réaliser une equête de mise à jour d'un table "table1", jointe avec 2 autres tables (table2 et table3), et mettre la valeur d'un champ de la table 3 dans un champ de la table 1.

    Je ne sais pas si je suis très clair.

    mes jointures entre mes tables :
    TABLE2.CHAMP1 = TABLE1.CHAMP2
    TABLE2.CHAMP1 = TABLE3.CHAMP3
    TABLE1.CHAMP4 = TABLE3.CHAMP5

    Expression litérale de mise à jour :
    quand les champ 10 et 11 de ma table 1 sont null, et que le champ 6 de la table 3 est égal à 'N' (CHAR(1), alors mettre la valeur de table3.champ10 dans table1.champ11 et '20' (CHAR(2) )dans le champ10 de la table 1

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    UPDATE TABLE1 
    SET CHAMP10 = '20', CHAMP11=TABLE3.CHAMP10
    WHERE TABLE2.CHAMP1 = TABLE1.CHAMP2
    AND TABLE2.CHAMP1 = TABLE3.CHAMP3
    AND TABLE1.CHAMP4 = TABLE3.CHAMP5
    AND TABLE3.CHAMP6 = 'N'
    AND CHAMP10 Is null
    AND CHAMP11 Is null
    ;
    la requête ci dessus me donne une erreur :
    ERREUR à la ligne 6 :
    ORA-00904: "TABLE3"."CHAMP6" : identificateur non valide

    j'ai la même erreur sur la ligne 5 avec le champ TABLE3.CHAMP5 quand je supprime la ligne 6.

    comment faire pour réaliser ma mise à jour ?

    Merci d'avance.

    Bonne journée.

  2. #2
    Membre chevronné Avatar de Garuda
    Homme Profil pro
    Chef de projet / Urbaniste SI
    Inscrit en
    Juin 2007
    Messages
    1 285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet / Urbaniste SI
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 285
    Points : 2 071
    Points
    2 071
    Par défaut
    Il faut mettre des from !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    UPDATE TABLE1 
    SET CHAMP10 = '20', CHAMP11=
    ( SELECT TABLE3.CHAMP10
    FROM TABLE2,TABLE3
    WHERE TABLE2.CHAMP1 = TABLE1.CHAMP2
    AND TABLE2.CHAMP1 = TABLE3.CHAMP3
    AND TABLE1.CHAMP4 = TABLE3.CHAMP5
    AND TABLE3.CHAMP6 = 'N')
    WHERE
    CHAMP10 Is null
    AND CHAMP11 Is null
    ;
    Garuda गरूड
    Brahmâ la Guerre et Vishnu la Paix

    Oracle 12C R2 - Forms11GR2 - Toad 12 - sharePoint 2010

  3. #3
    Membre confirmé Avatar de miloux32
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    545
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 545
    Points : 565
    Points
    565
    Par défaut
    Citation Envoyé par Garuda
    Il faut mettre des from !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    UPDATE TABLE1 
    SET CHAMP10 = '20', CHAMP11=
    ( SELECT TABLE3.CHAMP10
    FROM TABLE2,TABLE3
    WHERE TABLE2.CHAMP1 = TABLE1.CHAMP2
    AND TABLE2.CHAMP1 = TABLE3.CHAMP3
    AND TABLE1.CHAMP4 = TABLE3.CHAMP5
    AND TABLE3.CHAMP6 = 'N')
    WHERE
    CHAMP10 Is null
    AND CHAMP11 Is null
    ;
    Moi je mettrais un IN ( on ne sait jamais )


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    UPDATE TABLE1 
    SET CHAMP10 = '20', CHAMP11 IN
    ( SELECT TABLE3.CHAMP10
    FROM TABLE2,TABLE3
    WHERE TABLE2.CHAMP1 = TABLE1.CHAMP2
    AND TABLE2.CHAMP1 = TABLE3.CHAMP3
    AND TABLE1.CHAMP4 = TABLE3.CHAMP5
    AND TABLE3.CHAMP6 = 'N')
    WHERE
    CHAMP10 Is null
    AND CHAMP11 Is null
    ;
    C'est pas parce que ca marche que c'est bon!!
    Pensez au bouton "Résolu"
    Je ne réponds pas en privé aux questions

  4. #4
    Membre chevronné Avatar de Garuda
    Homme Profil pro
    Chef de projet / Urbaniste SI
    Inscrit en
    Juin 2007
    Messages
    1 285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet / Urbaniste SI
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 285
    Points : 2 071
    Points
    2 071
    Par défaut
    Si tu mets un IN , je pense que tu risques l'erreur TOO_MANY_ROWS !!!

    L'update ne marchera, et c'est normal, que si la sous-requete raméne un et un seul enregistrement.

    Et en me relisant , le IN, c'est idiot !
    UN IN ne peut être utilisé que dans un WHERE !
    Garuda गरूड
    Brahmâ la Guerre et Vishnu la Paix

    Oracle 12C R2 - Forms11GR2 - Toad 12 - sharePoint 2010

  5. #5
    Membre confirmé Avatar de miloux32
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    545
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 545
    Points : 565
    Points
    565
    Par défaut
    Citation Envoyé par Garuda
    Si tu mets un IN , je pense que tu risques l'erreur TOO_MANY_ROWS !!!

    L'update ne marcheras, et c'est normal, que si la sous-requete raméne un et un seul enregiqtrement.
    OUPS !! Pardon j'ai mal lu la requete !
    J'ai cru que le second "SELECT" etait dans le WHERE
    C'est pas parce que ca marche que c'est bon!!
    Pensez au bouton "Résolu"
    Je ne réponds pas en privé aux questions

  6. #6
    Membre à l'essai
    Inscrit en
    Mai 2002
    Messages
    37
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Mai 2002
    Messages : 37
    Points : 17
    Points
    17
    Par défaut
    Merci beaucoup,

    j'avais pensé à la requete imbriqué, mais je voyais pas comment faire les jointures.

    je test ça.

    Merci en tout cas pour votre aide.

    EDIT : ca marche pas !

    j'ai droit à cette erreur :
    ORA-01427: sous-interrogation ramenant un enregistrement de plus d'une ligne

    EDIT 2: je n'ai plus d'erreur, mais au lieu d'avoir 30 lignes misesà jour, la requete à modifiée toutes les lignes.

    je me retrouve avec '20' sur toutes les lignes qui était avant vide, alors que moi, je voulais 20 uniquement sur les lorsque le champ 6 de la table 3 est égal à 'N' (pour les autres lignes la table 1, le champ doit rester vide.)

    le champ11 est lui bien rempli quand il faut.

    la solution que j'ai à l'esprit et de rester comme cela, et d'utiliser une 2ème requête qui met à jour le champ10 de '20' à null lorsque le champ 11 est null

  7. #7
    Membre chevronné Avatar de Garuda
    Homme Profil pro
    Chef de projet / Urbaniste SI
    Inscrit en
    Juin 2007
    Messages
    1 285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet / Urbaniste SI
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 285
    Points : 2 071
    Points
    2 071
    Par défaut
    Je t'ai donné le principe général.
    A toi de faire marcher ton select pour qu'il ramène l'unique bonne valeur pour mettre à jour le champ.
    Ne cherche pas ailleurs : il est tres courant de faire des mises à jour de cette facon !
    Garuda गरूड
    Brahmâ la Guerre et Vishnu la Paix

    Oracle 12C R2 - Forms11GR2 - Toad 12 - sharePoint 2010

  8. #8
    Membre à l'essai
    Inscrit en
    Mai 2002
    Messages
    37
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Mai 2002
    Messages : 37
    Points : 17
    Points
    17
    Par défaut
    Merci, je vais voir avec les DBA si ca ne les genes pas, mais je pense en effet passer en 2 requêtes.

    au moins, je suis sur du résultat.

    Merci beaucoup en tout cas.

    Bonne journée.

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

Discussions similaires

  1. [MySQL-5.1] Requête UPDATE avec jointure
    Par transistor49 dans le forum Requêtes
    Réponses: 4
    Dernier message: 06/05/2014, 22h43
  2. Requête update avec jointure
    Par wolfdream dans le forum Requêtes
    Réponses: 1
    Dernier message: 09/03/2011, 10h19
  3. Réponses: 3
    Dernier message: 25/05/2009, 17h11
  4. Requête Update avec jointure
    Par maph1 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 06/02/2008, 00h10
  5. Requete update avec jointure d'une requête
    Par bart64 dans le forum Requêtes et SQL.
    Réponses: 10
    Dernier message: 28/05/2007, 20h31

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