这有什么问题?

时间:2011-12-17 14:04:38

标签: sql sql-server-2008

SELECT KundeID, Kundenummer, Fornavn, Efternavn, Adresse, Postnummer, [By] 
FROM dbo.Kundeliste
INNER JOIN Ordreliste
ON Ordreliste.KundeID<>Kundeliste.KundeID

我没有得到正确的输出。我需要所有尚未从我的客户列表中下订单的客户

1 个答案:

答案 0 :(得分:6)

您需要anti semi join。执行此操作的三种最常见方式是NOT EXISTSNOT INOUTER JOIN过滤NULL

我通常使用NOT EXISTS,因为它可以避免NULL拥有NOT IN并且通常会获得the most efficient plan的问题。

SELECT KundeID,
       Kundenummer,
       Fornavn,
       Efternavn,
       Adresse,
       Postnummer,
       [By]
FROM   dbo.Kundeliste
WHERE  NOT EXISTS (SELECT *
                   FROM   Ordreliste
                   WHERE  Ordreliste.KundeID = Kundeliste.KundeID)  

具有<>条件的当前查询几乎完成整个笛卡尔/交叉连接。对于dbo.Kundeliste中的每一行,它将加入Ordreliste 中的所有行,但具有相同KundeIDKundeID为空的行。