在SQL查询中使用1 = 2

Kin*_*ngs 7 sql

有人请在下面的SQL查询中解释'1 = 2'的含义.

SELECT E.EmpID,
       E.EmpName,
       Country = CASE
                   WHEN T.Active = 'N'
                        AND 1 = 2 THEN 'Not Working Anymore'
                   ELSE C.Country_Name
                 END,
       T.Contract_No
FROM   Employees E (nolock)
       INNER JOIN Contract T
         ON T.Contract_No = E.Contract_No
       LEFT JOIN Country C (nolock)
         ON E.Country_ID = C.Country_ID 
Run Code Online (Sandbox Code Playgroud)

谢谢

编辑: - 纠正了我给出的示例SQL查询中存在的轻微错误.@ ALL: - 这里提到的查询是一个大工作查询的示例版本,我必须重新提供一些东西.为了简化问题,我创建了SQL查询的示例场景.

小智 19

如果要从另一个表创建表,但是您不想复制任何行,则可以很好地使用1=2WHERE子句的这一部分.例如:

CREATE TABLE ABC_TEMP AS
    SELECT * FROM ABC WHERE 1=2;
Run Code Online (Sandbox Code Playgroud)


Yaq*_*mad 7

when T.Active = 'N' and 1=2 then 'Not Working Anymore' 
Run Code Online (Sandbox Code Playgroud)

简单,上述条件永远不会成为true.所以结果永远都是C.Country_Name


Pie*_*ens 6

这是动态构造SQL过滤器子句的常用技巧.这允许自动构造"T.Active ='N'和"而不需要检查以下子句,因为将始终附加"1 = 2".

更新: 是否使用1 = 1或1 = 2取决于是否应该使用连接或析取正常形式来构建自动化子句.在这种情况下,似乎设计和实现不匹配.

更新2 我相信大多数开发人员更喜欢连接正常形式,主要术语由AND连接,但析取正常形式在表达能力和代码大小方面相同.