7

有人请在下面的 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 查询的示例场景。

4

10 回答 10

21

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

CREATE TABLE ABC_TEMP AS
    SELECT * FROM ABC WHERE 1=2;
于 2013-09-03T20:50:56.907 回答
7
when T.Active = 'N' and 1=2 then 'Not Working Anymore' 

很简单,上面的条件永远不会变成true。所以结果永远是C.Country_Name

于 2013-03-01T13:28:08.570 回答
6

这是动态构造 SQL 过滤子句的常用技巧。这允许自动构造“T.Active = 'N' and”,而无需检查后续子句,因为始终会附加“1=2”。

更新: 是否使用 1=1 或 1=2 取决于在构建自动子句时是否应该使用合取或析取范式。在这种情况下,设计和实现似乎不匹配。

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

于 2013-03-01T13:26:56.527 回答
4

它对应于一个 FALSE 参数。

例如 ;

select * from TABLE where 1=2

返回零行。

于 2013-03-01T13:25:37.607 回答
2

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

一如既往。1=2_false

于 2013-03-01T13:26:28.493 回答
1

添加 and 1=2 将导致这种情况总是返回 false。要找出它为什么在那里,请询问将它放在那里的人。

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

于 2013-03-01T13:26:49.977 回答
1

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

于 2013-03-01T13:27:14.903 回答
1

1 = 2 意味着我们给出的条件总是错误的;因此,您的行不会显示 ('NULL') 记录...

即创建表empt_tgt AS 选择empno、ename、job、mgr、sal WHERE 1=2;

然后假设当我们执行以下语句时 empt_tgt 具有所有这些列的记录: SELECT * FROM empt_tgt

EMPT_TGT 将为空;这意味着我们只会看到列名 empno、ename、job、mgr、sal 没有数据...

于 2016-10-04T23:30:18.230 回答
0

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

于 2019-02-19T14:06:17.237 回答
0

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

于 2020-02-03T16:20:53.213 回答