是否可以将带有 NOT IN 运算符的子查询转换为加入?我需要使用连接进行此查询
选择 * 从联系人 ContactIntID 不在的地方( 选择 LinkToIntID 从要求 WHERE Requirements.uuJobStatus = 'Open')
是否可以将带有 NOT IN 运算符的子查询转换为加入?我需要使用连接进行此查询
选择 * 从联系人 ContactIntID 不在的地方( 选择 LinkToIntID 从要求 WHERE Requirements.uuJobStatus = 'Open')
是的。
SELECT c.*
FROM Contacts c
LEFT JOIN
(SELECT LinkToIntID FROM Requirements WHERE uuJobStatus='Open') r
ON (c.ContactIntID=r.LinkToIntID)
WHERE r.LinkToIntID IS NULL
并简化:
SELECT c.*
FROM Contacts c
LEFT JOIN
Requirements r
ON r.uuJobStatus = 'Open'
AND c.ContactIntID = r.LinkToIntID
WHERE r.LinkToIntID IS NULL
使用 non exists 通常会比使用 LEFT JOIN 执行得更好。有了上面的答案,联系人将加入所有记录,无论它们是否匹配,然后使用 IS NULL 子句将它们过滤掉。
SELECT *
FROM Contacts c
WHERE NOT EXISTS
(
SELECT 1
FROM Requirements r
WHERE Requirements.uuJobStatus = 'Open'
AND ContractIntID = r.LinkToIntID
)
编辑:意识到你想要一个非子查询,但仍然值得注意我的回复:)
SELECT *
FROM Contacts C LEFT JOIN Requirements R
ON C.CommonField = R.CommonField
WHERE R.CommonField IS NULL AND R.uuJobStatus = 'Open'