在简单的 sql 书中,有部分代码提到如果我使用 where 1 = 0
,我可以安全地添加一个 OR 条件,例如:
WHERE
1=0
OR name LIKE '%Toledo%'
OR billaddr LIKE '%Toledo%'
OR shipaddr LIKE '%Toledo%'
我不明白为什么当我使用 where 1 = 0
时我可以安全地添加一个 OR 语句
我可以只使用像下面这样的东西吗?
WHERE
1=1
OR name LIKE '%Toledo%'
OR billaddr LIKE '%Toledo%'
OR shipaddr LIKE '%Toledo%'
我理解 where 1=1
是添加 And 语句的快捷方式。
我明白,因为 where 1 =1
将返回 true。我可以将它用于 Or
语句吗?
我仍然没有得到 where 1 = 0
部分
任何解释都会很棒。
最佳答案
这取决于您正在处理的 bool 运算类型。如果要添加可变数量的 AND
语句,则可以使用始终计算为 true 的语句,例如 1 = 1
。另一方面,如果您想对 OR
语句执行相同的操作,则应使用计算结果为 false 的语句,例如 1 = 0
。
假设您有一个 bool 变量 x
,其真值不确定(它可能为真,也可能为假。您不知道。)现在,如果您找到x AND false
,无论 x
的值是多少,您都会得到 false
。
另一方面,如果您查看 x OR true
,您将得到 true
。同样,这与 x
的真值无关。
在您的语句中,您希望硬编码值对查询逻辑没有影响。由于 false OR a OR b OR c
在逻辑上等同于 a OR b OR c
,因此硬编码语句无效。在另一种情况下,true AND a AND b AND c
等同于 a AND b AND c
。
关于mysql where 1= 0 混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6145809/