Bonjour,
Je tourne en rond depuis un moment sur un problème qui a déjà dû être résolé 20 fois, mais je ne trouve nulle part comment...
J'ai une table MaTable1 avec 3 clés primaires id1, id2, id3.
J'ai une table MaTable2 avec 4 clés primaires id1, id2, id3 et id4 (id1, id2 et id3 sont aussi des clés étrangères vers MaTable1. Me demandez pas pour quoi ne pas mettre un id unique dans cette table et 3 clés étrangères, je n'y suis pour rien ^^ mais ça change pas grand chose au problème.).
Je cherche à supprimer de MaTable1 tous les enregistrements qui ne sont pas dans MaTable2.
Comment faire ça en une seule requête ? Je pensais à un truc du genre :
La requête suivante marche très bien et me renvoie les bons enregistrements :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 DELETE FROM MaTable1 WHERE (id1, id2, id3) IN ( SELECT DISTINCT T1.id1, T1.id2, T1.id3 FROM MaTable1 T1 LEFT OUTER JOIN MaTable2 T2 ON (T1.id1 = T2.id1) AND (T1.id2 = T2.id2) AND (T1.id3 = T2.id3) WHERE (T2.id4 IS NULL) )
Mais quand je l'intègre à l'autre, SQL Server me balance l'exception :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 SELECT DISTINCT T1.id1, T1.id2, T1.id3 FROM MaTable1 T1 LEFT OUTER JOIN MaTable2 T2 ON (T1.id1 = T2.id1) AND (T1.id2 = T2.id2) AND (T1.id3 = T2.id3) WHERE (T2.id4 IS NULL)Je crois qu'il n'aime pas le IN sur plusieurs champs...Expression de type non booléen spécifiée dans un contexte où une condition est attendue, près de ','.
J'ai raté quelque chose ou c'est pas possible de faire comme ça ?
Partager