2010-02-02 3 views

Répondre

6

Voici joint les tables, puis sélectionne les sans éléments de commande. La jointure est considérée comme plus efficace que l'utilisation de `IN '.

select * 
from 
    Orders O 
    left outer join OrderItems I 
    on I.OrderId = O.Id 
where 
    I.Id is null 
+0

C'est ce que j'ai fini par faire, merci – Slee

+0

Aaron - Je peux imaginer comment une jointure externe gauche serait plus efficace mais avez-vous une référence spécifique pour votre assertion? J'éviterais probablement d'utiliser cette construction en raison de la complexité supplémentaire, mais cela pourrait être approprié (pour moi) pour les grands ensembles de données s'il y a une nette différence de performance. –

+0

Je n'ai pas de référence spécifique; c'est juste une affirmation que j'ai entendue de mes collègues et une que j'ai souvent trouvée être vraie dans mes propres expériences. Cette solution n'est pas nécessairement la meilleure pour chaque cas, il est donc préférable d'essayer chacun d'eux et de vérifier leurs plans d'exécution respectifs et de décider lequel est le meilleur à partir de là. – Aaron

4
Select * From Orders Where OrderID not in (Select Distinct OrderID From OrderItems) 
1

essayer avec EXCEPTION LEFT JOIN

select * 
from Orders 
LEFT EXCEPTION JOIN OrderItems ON ... 
+0

+1 - Cool - n'ont pas vu celui-là avant. –

Questions connexes