在SQL查询中使用1 = 2

时间:2013-03-01 13:22:28

标签: 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 

感谢

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

10 个答案:

答案 0 :(得分:19)

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

CREATE TABLE ABC_TEMP AS
    SELECT * FROM ABC WHERE 1=2;

答案 1 :(得分:7)

when T.Active = 'N' and 1=2 then 'Not Working Anymore' 

简单,上述条件永远不会成为true。 因此,结果始终为C.Country_Name

答案 2 :(得分:6)

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

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

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

答案 3 :(得分:4)

它对应于一个FALSE参数。

例如;

select * from TABLE where 1=2

返回零行。

答案 4 :(得分:1)

如果想要检索任何行,请使用WHERE 1=2

由于1=2始终为false

答案 5 :(得分:1)

添加和1 = 2会导致该情况始终返回false。要找出它存在的原因,请询问将其放在那里的人。

我怀疑它被放在那里所以作者可以强迫第一个条件是假的,然后他忘了删除它。

答案 6 :(得分:1)

我猜这是一个调试脚本。它总是返回案件的负面部分。可能在发布时该部分被取出。

答案 7 :(得分:1)

1 = 2意味着我们提供的条件总是假的;因此,您的行不会显示任何记录('NULL')...

即       创建表empt_tgt       如       选择empno,ename,job,mgr,sal       在哪里1 = 2;

然后假设empt_tgt包含所有这些列的记录 当我们执行以下声明时:      SELECT * FROM empt_tgt

EMPT_TGT将为空;意思是我们只会看到列名empno,ename,job,mgr,sal no data ...

答案 8 :(得分:0)

我在公司的几段代码中发现了这一点。在我们的情况下,它通常被错误地作为DEBUG代码保留。开发人员可以将其用作占位符,类似于您的示例中的情况。

答案 9 :(得分:0)

人们使用1 = 2来检查他们的代码在语法上是否正确,而无需执行任何操作。例如,如果您有一个复杂的UPDATE语句,并且想要检查代码是否正确而不进行任何更新。