我有一个 T-SQL 难题似乎在起作用,但我想知道是否有人可以尝试给我一个关于这里发生的事情的细分。考虑以下脚本:
SELECT *
FROM TableA a
WHERE a.CustomerID NOT IN (SELECT b.CustomerID FROM TableB b WHERE a.CustomerID = b.CustomerID AND a.WorkOrder = b.WorkOrder)
AND a.[Date] > DATEADD(DD,-3,GETDATE())
我很困惑编译器如何没有在这个脚本上崩溃。它如何在引用外部查询的子查询上选择 where NOT IN?获取 TableA 的内容,其中 CustomerID NOT IN CustomerID's from TableB 等...但是当它在子查询中找到匹配的 CustomerID 时,NOT IN 会启动并阻止记录显示在外部查询选择中。我猜这是编译器停止的地方。但是由于没有选择特定的CustomerID,它无法加入内部查询,因此内部查询不选择该CustomerID,然后允许外部查询选择该记录?是的?不?掉进兔子洞?有没有更好的方法来写这个?
如果有人能详细说明这里发生的事情,或者参考可以解释的东西,将不胜感激。我真的找不到任何人解释这个过程,也许没有使用正确的搜索词。
谢谢!