WHERE
我想知道MySQL 中的以下两个子句之间是否有区别:
WHERE a.Id = b.Id = c.Id
对比
WHERE a.Id = b.Id and b.Id = c.Id
我在以下 SQLFiddle 中得到这两个查询的不同结果:http ://sqlfiddle.com/#!2/725396/3
WHERE
我想知道MySQL 中的以下两个子句之间是否有区别:
WHERE a.Id = b.Id = c.Id
对比
WHERE a.Id = b.Id and b.Id = c.Id
我在以下 SQLFiddle 中得到这两个查询的不同结果:http ://sqlfiddle.com/#!2/725396/3
根据MySQL doco for an expression,您的表达式a = b = c
使用以下形式boolean_primary
:
comparison_operator: = | >= | > | <= | < | <> | !=
boolean_primary:
boolean_primary comparison_operator predicate
因此相当于:
(a = b) = c
这意味着您将从中获得真值a = b
,然后将其与c
.
在 MySQL 中,boolean
类型等价于tinyint(1)
,其中0
为假,其他为真。因此,它只是一个可以与另一个进行比较的整数值。
此外,如果任何输入为 NULL,比较表达式like的结果a = b
将始终返回 0
false、1
true 或 NULL。
因此,要使表达式a = b = c
为真,它们中的任何一个都不允许为 NULL,并且以下条件之一必须为真:
a
等于b
,c
等于1
; 或者a
不等于b
,c
等于0
。这几乎肯定不是你想要的,正确的形式是第二种。
我认为不同之处在于,在第一个 WHERE 中,所有三个 id 都必须相等,而在后者中,a.id 应该等于 b.id 并且 b.id 应该等于 c.id 但这并不意味着 a .id 应该等于 c.id。