SQL:... WHERE X IN(SELECT Y FROM ...)

CJ7*_*CJ7 21 sql

以下是SQL中最有效的结果:

SELECT * 
  FROM Customers 
 WHERE Customer_ID NOT IN (SELECT Cust_ID FROM SUBSCRIBERS)
Run Code Online (Sandbox Code Playgroud)

是否可以更好地使用连接并获得相同的结果?

Mat*_*nen 9

任何足够成熟的SQL数据库应该能够像等效的那样有效地执行JOIN.使用任何更易读的东西.

  • +1这是正确的 - SQL Server将"NOT IN"和"NOT EXISTS"类型的查询转换为相同的执行计划. (4认同)

Mar*_*ith 7

您可能更喜欢使用JOIN而不是使用a的一个原因NOT IN是如果NOT IN子句中的值包含任何NULLs,您将始终无法获得结果.如果您确实使用NOT INremember,请始终考虑子查询是否可能带回NULL值!

RE:评论中的问题

'x'不是(NULL,'a','b')

≡'x'<> NULL和'x'<>'a'和'x'<>'b'

≡未知,真实和真实

≡未知

  • @Craig - 没错. (2认同)