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

Oracle Discussion :

|Oracle9iR2][SQL] UPDATE avec plusieurs tables en relation ?


Sujet :

Oracle

  1. #1
    Membre actif
    Inscrit en
    Juillet 2004
    Messages
    110
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 110
    Par défaut |Oracle9iR2][SQL] UPDATE avec plusieurs tables en relation ?
    Bonjour,

    Situation :
    J'ai trois tables, TB1, TB2 & TB3.
    TB1 (champs IDX IDY COULEUR) (clef primaire IDX+IDY)
    TB2 (champs IDX IDY IDZ) (clef primaire IDX+IDY)
    TB3 (champs IDZ COULEUR) (clef primaire IDZ)

    Au départ, pour les enregistrements de TB1, le champ COULEUR est vide.

    Je veux faire un UPDATE sur ce champ d'après le champ COULEUR de la table TB3. Il faut donc passer par la table TB2 pour créer le lien.
    TB1 à TB2 relation IDX/IDY
    TB2 à TB3 relation IDZ

    Le problème c'est que je n'arrive pas à faire la requête SQL sous ORACLE.
    Avec MS Access, j'y arrive avec des INNER JOIN.
    Sur le net, je vois que c'est apparemment pas facile. J'ai trouvé des exemples avec juste deux tables... Mais lorsqu'il y a une troisième table dans les relations, je ne trouve rien.

    Si qn a une idée, je suis preneur !

    Merci d'avance !

  2. #2
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    UPDATE tb1 a
    SET couleur = ( SELECT couleur
    				FROM TB3, TB2
    				WHERE tb2.idx = a.idx
    				AND tb2.idy = a.idy
    				AND tb3.idz = tb2.idz)
    WHERE couleur IS NULL

  3. #3
    Membre actif
    Inscrit en
    Juillet 2004
    Messages
    110
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 110
    Par défaut Ok !
    Re,

    Merci McM !

    Ca a l'air de marcher !!!
    C'est quand même tordu le SQL parfois...
    J'essayais en vain avec des WHERE EXISTS...

    Merci encore !

  4. #4
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    tordu ?
    Moi ça me parait logique....

  5. #5
    Membre chevronné

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    487
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 487
    Par défaut
    Il existe une autre méthode que j'aime beaucoup.
    Tu encapsules ta requete entière avec ta jointure, comme cela, tu peux voir le résultat de ton update AVANT de le faire.

    démonstration:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    select TB1.couleur ancien, TB3.couleur nouveau , --AUTRES CHAMPS SIGNIFICATIFS
    from TB1,TB2,TB3
    where tb1=TB2
    and tb2.idz=tb3.idz
    and tb1.couleur is null
    maintenenat, tu remplaces ancien par nouveau:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    update (
    	select TB1.couleur ancien, TB3.couleur nouveau , --AUTRES CHAMPS SIGNIFICATIFS
    	from TB1,TB2,TB3
    	where tb1=TB2
    	and tb2.idz=tb3.idz
    	and tb1.couleur is null
    	)
    set ancien=nouveau
    sympa non?

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

Discussions similaires

  1. [UPDATE] Faire un update avec plusieurs tables
    Par Fuzo13 dans le forum Requêtes
    Réponses: 5
    Dernier message: 01/10/2012, 11h37
  2. Réponses: 6
    Dernier message: 28/06/2010, 13h04
  3. [1.x] UPDATE avec plusieurs tables
    Par agrel dans le forum Symfony
    Réponses: 1
    Dernier message: 06/05/2010, 16h10
  4. UPDATE avec plusieurs tables
    Par MinsK dans le forum Requêtes
    Réponses: 5
    Dernier message: 06/11/2009, 20h42
  5. Update de plusieurs tables, import fichier csv sql loader
    Par fusuke dans le forum SQL*Loader
    Réponses: 2
    Dernier message: 18/05/2006, 15h08

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