2010-11-26 38 views
1

J'ai actuellement une requêteMySQL Devenez membre et sélectionne internes

SELECT id FROM table1 où {filtres table1} et l'ID NOT IN (SELECT table1ID DE table2 WHERE = 0)

Tableau 1 a une relation 1 - Many avec table2 et je cherche tous les ID qui n'ont pas d'entrées dans table2 avec condition = 0.

Existe-t-il un moyen de réécrire cette requête sans sélection interne? Je me suis gratté la tête à ce sujet depuis un moment maintenant et tous les pointeurs seraient les bienvenus.

Répondre

1

Vous pouvez essayer quelque chose comme

SELECT id 
FROM table1 t1 LEFT JOIN 
     table2 t2 ON t1.ID = t2.table1ID 
        AND t2.Condition = 0 
WHERE {filters on table1} 
AND  t2.table1ID IS NULL 

Ou tout aussi bon serait

SELECT id 
FROM table1 t1 
WHERE {filters on table1} 
AND  NOT EXISTS (
         SELECT 1 
         FROM table2 t2 
         WHERE t1.ID = t2.table1ID 
         ADN  t2.condition = 0 
        ) 
+0

Ne serait-ce que la première requête doivent être un OUTER JOIN? –

+0

Non, LEFT JOIN devrait convenir. Vous recherchez des éléments manquants (donc l'IS NULL) et il ne devrait retourner qu'une seule ligne, car quelque chose ne peut manquer qu'une seule fois. –

+0

Merci mon pote, c'est parfait. J'avais quelque chose de similaire au premier, mais je n'arrivais pas à le comprendre. Très apprécié. – PuffTheMagicDragQueen