Bonjour à tous,
J'avais à ce jour une requête de mise à jour qui s'effectuait ainsi :
Je dois la modifier en faisant une jointure sur une autre table :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 UPDATE TABLE_A SET champ1 = (a.champ2 + 'XX') FROM TABLE_A a WHERE champ3 = a.champ3 AND champ4 = a.champ4
Ce code ne marche pas : il considère qu'il y a ambiguïté sur le terme champ3 dans la clause WHERE (et il n'a pas tort !).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 UPDATE TABLE_A SET champ1 = (a.champ2 + 'XX') FROM TABLE_A a INNER JOIN TABLE_B b ON a.champ3 = b.champ3 WHERE champ3 = a.champ3 AND champ4 = a.champ4
Bien sur, je ne peux pas mettre un alias sur ma table ainsi :
(ça, il aime pas du tout du tout)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 UPDATE TABLE_A a1 SET champ1 = (a2.champ2 + 'XX') FROM TABLE_A a2 INNER JOIN TABLE_B b ON a1.champ3 = b.champ3 WHERE a2.champ3 = a1.champ3 AND a2.champ4 = a1.champ4
J'ai donc inclus ma jointure dans ma clause WHERE ainsi :
Mais bon personnellement, je trouve ça plus lourd...
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 UPDATE TABLE_A SET champ1 = (a.champ2 + 'XX') FROM TABLE_A a WHERE champ3 = a.champ3 AND champ3 IN ( SELECT b.champ3 FROM TABLE_B b INNER JOIN TABLE_A a ON a.champ3 = b.champ3 AND a.champ4 = b.champ4 ) AND champ4 = a.champ4 AND champ4 IN ( SELECT b.champ4 FROM TABLE_B b INNER JOIN TABLE_A a ON a.champ3 = b.champ3 AND a.champ4 = b.champ4 )
Quelqu'un aurait une idée ?
D'avance merci.
Partager