2011-05-21 4 views
0

pour vérifier la sous-requête ayant plusieurs instruction select à l'intérieur de la condition 'not in'Sous-requête avec plusieurs instructions de sélection

Par exemple.

select id from tbl where 
id not in (select id from table1) and 
id not in (select id from table2) and 
id not in (select id from table3) 

au lieu de répéter le même id « non » état, j'ai besoin du sous-requête qui va vérifier d'un seul coup de plusieurs tables ..

pls aide ..

+0

votre question apparemment urgente a été répondue ci-dessous ..... –

Répondre

0

vous pouvez utiliser un syndicat, il vous suffit d'un in:

select id 
from tbl 
where id not in 
     (
     select id from table1 
     union all select id from table2 
     union all select id from table3 
     ) 

Remarque: not in ne fonctionne pas correctement avec les colonnes NULL, mais je suppose que id n'est pas Nullable ici.

+0

je serais intéressé de comparer les plans de requête avec cette réponse et le mien .... –

1

Votre requête est mieux exprimée:

SELECT id 
FROM tbl t 
LEFT JOIN table1 t1 on t1.id = t.id 
LEFT JOIN table2 t2 on t2.id = t.id 
LEFT JOIN table3 t3 on t3.id = t.id 
WHERE t1.id IS NULL AND t2.id IS NULL AND t3.id IS NULL 
+0

(renuméroté vos tables, puisque vous avez été laissé joindre à table1 deux fois, et pas du tout à table3) –

+0

merci, je suis une dactylo terrible! –

Questions connexes