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
    ;

  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
    ;

  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 !

  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

  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 !

  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