Bonjour à tous,

J'avais à ce jour une requête de mise à jour qui s'effectuait ainsi :

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
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
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
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 !).
Bien sur, je ne peux pas mettre un alias sur ma table ainsi :

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
(ça, il aime pas du tout du tout)

J'ai donc inclus ma jointure dans ma clause WHERE ainsi :

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
)
Mais bon personnellement, je trouve ça plus lourd...

Quelqu'un aurait une idée ?

D'avance merci.