mysql where 1= 0 混淆

标签 mysql select

在简单的 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/

相关文章:

mysql插入与更新性能

mysql - 正确的 SQL 查询是什么

Sql查询需要对多个日期列一起排序

oracle - 选择不同的…内部联接与选择…在(…)中的id

mysql - 我的代码有什么问题,因为没有错误,但我无法运行它?

mysql - 通过eventid获取每个用户的最后一条记录

mysql - 查找关联模型中日期范围内的差距 | Rails 上的 Ruby

mysql - 使用MySQL SELECT属性类似于Amazon的SimpleDB

mysql - 将两个选择合并为一个

java - Struts2填充标签选择下拉列表