Mysql,其中1=0

Mysql,其中1=0,mysql,select,Mysql,Select,在simply sql book中,有一部分代码提到如果我使用where 1=0,我可以安全地添加一个或多个条件,如: 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%'

在simply sql book中,有一部分代码提到如果我使用
where 1=0
,我可以安全地添加一个或多个条件,如:

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%'
我知道
其中1=1
是添加And语句的快捷方式。
我理解这一点,因为
其中1=1
将返回true。我可以将其用于
语句吗?
Istill未获取零件
,其中1=0


任何解释都很好。

这取决于您正在处理的布尔运算类型。如果要添加数量可变的
语句,则使用计算结果总是为true的语句,例如
1=1
。另一方面,如果要对
语句执行相同的操作,则应使用计算结果为false的语句,例如
1=0

假设您有一个布尔变量
x
,其真值不确定(可能为真,也可能为假。您不知道)。现在,如果您找到
x和false的值,则无论
x
的值是什么,您都会得到
false

另一方面,如果您查看
x或true
,您将得到
true
。同样,这与
x
的真值无关

在语句中,您希望硬编码的值对查询的逻辑没有影响。由于
false或a或b或c
在逻辑上等同于
a或b或c
,因此硬编码语句无效。在另一种情况下,
true以及a和b和c
相当于
a和b和c

一旦结果解析为确定的TRUE或FALSE,MySQL就会停止计算其余行

正确还是错误?或者?
将始终为真,因此MySQL将只查看第一项,而不测试任何其他内容。
FALSE和?而且?
将始终为FALSE,因此MySQL也不会查看其他测试

这有一个(意外的)副作用,即MySQL永远不会使用类似的方法查看您的表,而是返回以下查询中的所有行:

SELECT * FROM atable
WHERE
   1=1                         /* <--- this makes the whole OR set always true*/
   OR name LIKE '%Toledo%'     /* therefore the like tests are never done     */
   OR billaddr LIKE '%Toledo%' /*and all rows are returned */
   OR shipaddr LIKE '%Toledo%'
这与

我可以用下面这样的东西吗

WHERE
   1=1
   OR name LIKE '%Toledo%'
   OR billaddr LIKE '%Toledo%'
   OR shipaddr LIKE '%Toledo%'

这将返回每一行(因为它总是真的),所以不…

注意,为了可读性,您也可以使用
where false或
where true和
WHERE
   1=1
   OR name LIKE '%Toledo%'
   OR billaddr LIKE '%Toledo%'
   OR shipaddr LIKE '%Toledo%'