有人请在下面的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查询示例场景。
答案 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语句,并且想要检查代码是否正确而不进行任何更新。