这两个查询在技术上是否相等?

the*_*cer 0 sql-server subquery

在我的查询浏览器中运行它。我是得到两个相同的结果。但是还是需要确认。

SELECT 
    cs.RSCode
    , CustomerName
    , em.EmailId 
FROM 
    Customer_STN cs
    JOIN EmployeeMaster em ON cs.RSCode = em.UserName
    LEFT OUTER JOIN Confirmed_Attendance ca ON cs.RSCode = ca.rsCode
WHERE
    isConfirmed=1 
AND
    dateOfConfirmation = '2012-08-25'
Run Code Online (Sandbox Code Playgroud)

第二个查询:

SELECT 
    cs.RSCode
    , CustomerName
    , em.EmailId 
FROM 
    Customer_STN cs
JOIN 
    EmployeeMaster em ON cs.RSCode = em.UserName
WHERE 
    RSCode NOT IN (
        SELECT 
             rsCode 
        FROM 
             Confirmed_Attendance 
        WHERE 
             dateOfConfirmation = '2012-08-25' 
        AND 
             isConfirmed = 1
)
Run Code Online (Sandbox Code Playgroud)

编辑:添加了WHERERob 注意到的部分。不再那么相似了。

Rob*_*ley 6

不,但几乎。

join 有四件事要做。我在:SQL Server 中的 JOIN 简化

你的“ NOT IN”(你应该小心,关于NULLs- 尝试使用NOT EXISTS)不会复制任何行。一个LEFT JOIN罐头。但是考虑使用唯一索引/约束/PK,这可以帮助查询优化器将它们视为相同。

总的来说,使用NOT EXISTS而不是LEFT JOIN,因为NOT EXISTS会被视为反半连接,这比 a 稍微好LEFT JOIN / NOT NULL一点。我在以下位置展示:Joins without JOIN

所以......基于我对你的查询的假设,答案是:

几乎。(以及“几乎”如何取决于所涉及的元数据)