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

Développement SQL Server Discussion :

Update et double jointure


Sujet :

Développement SQL Server

  1. #1
    Candidat au Club
    Inscrit en
    Juillet 2012
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Juillet 2012
    Messages : 6
    Points : 2
    Points
    2
    Par défaut Update et double jointure
    Bonjour,

    C'est tout bête, j'essaye de faire un update sur une table en récupérant la donnée d'une autre table lié à la première par une double jointure...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    UPDATE BCPEDEVWH
    set BCPEDEVWH.AXE1 = BCPAXG1WH.DESIG
    FROM BCPEDEVWH
    WHERE BCPEDEVWH.SOCIETE = BCPAXG1WH.SOCIETE AND BCPEDEVWH.BCPAXG1_IDENT = BCPAXG1WH.IDENT
    Et pas mieux avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    UPDATE BCPEDEVWH
    set d.AXE1 = B1.DESIG
    FROM BCPEDEVWH d
    INNER JOIN BCPAXG1WH B1 ON B1.SOCIETE=d.SOCIETE
    INNER JOIN BCPAXG1WH B2 ON B2.IDENT=d.BCPAXG1_IDENT
    Est-ce que quelqu'un aurait une idée ?

    Merci.

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    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 453
    Points : 18 394
    Points
    18 394
    Par défaut
    Je pense que vous n'êtes pas très loin :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
        UPDATE d
           SET d.AXE1     = B1.DESIG
          FROM BCPEDEVWH AS d
    INNER JOIN BCPAXG1WH AS B1
            ON B1.SOCIETE = d.SOCIETE
    INNER JOIN BCPAXG1WH AS B2
            ON B2.IDENT   = d.BCPAXG1_IDENT;

  3. #3
    Candidat au Club
    Inscrit en
    Juillet 2012
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Juillet 2012
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    Merci pour votre retour mais je me suis mal exprimé. La deuxième requète fonctionne mais la mise à jour rapatrie dans AXE1 une valeur que je n'attends pas "Saint Herblain" dans l'extrait de la table pour la combinaison "Société-BCPAXG1"="Morisseau-2" c'est la valeur "La baule" attendu et non "Saint Herblain"


    Extrait Table BCPEDEVWH

    SOCIETE		NUMERO_DOC	BCPAXG1_IDENT	AXE1		
    Morisseau	14001439	3		Saint Herblain
    Morisseau	14001440	3		Saint Herblain
    Morisseau	14001442	3		Saint Herblain
    Morisseau	14001443	3		Saint Herblain
    Morisseau	14001444	2		Saint Herblain
    Morisseau	14001445	3		Saint Herblain
    Morisseau	14001446	3		Saint Herblain
    Morisseau	14001447	3		Saint Herblain
    Morisseau	14001448	3		Saint Herblain	
    Morisseau	14001449	2		Saint Herblain
    Morisseau	14001450	3		Saint Herblain
    Table BCPAXG1WH
    IDENT	SOCIETE			DESIG
    1	Guesneau Couverture	St Herblain
    1	Guesneau Batiment	St Herblain
    2	Guesneau Batiment	Orvault
    3	Guesneau Batiment	La Baule
    1	Guesneau Services	St Herblain
    2	Guesneau Services	Orvault
    3	Guesneau Services	La Baule
    2	Morisseau		Saint Herblain
    3	Morisseau		La Baule
    Merci.

  4. #4
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    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 453
    Points : 18 394
    Points
    18 394
    Par défaut
    Il suffit de mettre les deux prédicats dans la même jointure :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        UPDATE d
           SET d.AXE1     = B1.DESIG
          FROM BCPEDEVWH AS d
    INNER JOIN BCPAXG1WH AS B1
            ON B1.SOCIETE = d.SOCIETE
           AND B1.IDENT   = d.BCPAXG1_IDENT;
    Avec vos données :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    declare @BCPEDEVWH table (SOCIETE varchar(20), NUMERO_DOC integer, BCPAXG1_IDENT tinyint, AXE1 varchar(20));
     
    declare @BCPAXG1WH table (IDENT tinyint, SOCIETE varchar(20), DESIG varchar(20));
     
    insert into @BCPEDEVWH (SOCIETE, NUMERO_DOC, BCPAXG1_IDENT, AXE1)
    select 'Morisseau', 14001439, 3, 'Saint Herblain' union all
    select 'Morisseau', 14001440, 3, 'Saint Herblain' union all
    select 'Morisseau', 14001442, 3, 'Saint Herblain' union all
    select 'Morisseau', 14001443, 3, 'Saint Herblain' union all
    select 'Morisseau', 14001444, 2, 'Saint Herblain' union all
    select 'Morisseau', 14001445, 3, 'Saint Herblain' union all
    select 'Morisseau', 14001446, 3, 'Saint Herblain' union all
    select 'Morisseau', 14001447, 3, 'Saint Herblain' union all
    select 'Morisseau', 14001448, 3, 'Saint Herblain' union all
    select 'Morisseau', 14001449, 2, 'Saint Herblain' union all
    select 'Morisseau', 14001450, 3, 'Saint Herblain';
     
    insert into @BCPAXG1WH (IDENT, SOCIETE, DESIG)
    select 1, 'Guesneau Couverture', 'St Herblain'    union all
    select 1, 'Guesneau Batiment'  , 'St Herblain'    union all
    select 2, 'Guesneau Batiment'  , 'Orvault'        union all
    select 3, 'Guesneau Batiment'  , 'La Baule'       union all
    select 1, 'Guesneau Services'  , 'St Herblain'    union all
    select 2, 'Guesneau Services'  , 'Orvault'        union all
    select 3, 'Guesneau Services'  , 'La Baule'       union all
    select 2, 'Morisseau'          , 'Saint Herblain' union all
    select 3, 'Morisseau'          , 'La Baule';
     
        UPDATE d
           SET d.AXE1     = B1.DESIG
          FROM @BCPEDEVWH AS d
    INNER JOIN @BCPAXG1WH AS B1
            ON B1.SOCIETE = d.SOCIETE
           AND B1.IDENT   = d.BCPAXG1_IDENT;
     
    select * from @BCPEDEVWH;
     
    SOCIETE              NUMERO_DOC  BCPAXG1_IDENT AXE1
    -------------------- ----------- ------------- --------------------
    Morisseau            14001439    3             La Baule
    Morisseau            14001440    3             La Baule
    Morisseau            14001442    3             La Baule
    Morisseau            14001443    3             La Baule
    Morisseau            14001444    2             Saint Herblain
    Morisseau            14001445    3             La Baule
    Morisseau            14001446    3             La Baule
    Morisseau            14001447    3             La Baule
    Morisseau            14001448    3             La Baule
    Morisseau            14001449    2             Saint Herblain
    Morisseau            14001450    3             La Baule

  5. #5
    Candidat au Club
    Inscrit en
    Juillet 2012
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Juillet 2012
    Messages : 6
    Points : 2
    Points
    2
    Par défaut Grand Merci ...
    Merci beaucoup cela fonctionne parfaitement.

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

Discussions similaires

  1. Update et double jointure
    Par kilbane dans le forum Langage SQL
    Réponses: 3
    Dernier message: 02/04/2009, 12h01
  2. UPDATE multiple avec jointure
    Par PyRoFlo dans le forum Requêtes
    Réponses: 6
    Dernier message: 25/05/2006, 16h56
  3. requete avec double jointure externe
    Par cdu dans le forum Langage SQL
    Réponses: 8
    Dernier message: 04/01/2006, 15h54
  4. Doubles jointures externes....
    Par HPJ dans le forum Langage SQL
    Réponses: 2
    Dernier message: 16/11/2004, 16h28
  5. [jointure]requete possible de double jointure entre 2 tables
    Par akira_le_gaucher dans le forum Langage SQL
    Réponses: 4
    Dernier message: 11/05/2004, 16h03

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