SELECT KundeID, Kundenummer, Fornavn, Efternavn, Adresse, Postnummer, [By]
FROM dbo.Kundeliste
INNER JOIN Ordreliste
ON Ordreliste.KundeID<>Kundeliste.KundeID
我没有得到正确的输出。我需要所有尚未从我的客户列表中下订单的客户
答案 0 :(得分:6)
您需要anti semi join。执行此操作的三种最常见方式是NOT EXISTS
,NOT IN
和OUTER 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
中的所有行,但具有相同KundeID
或KundeID
为空的行。