我想知道MySQL中以下两个WHERE
子句之间是否存在差异:
WHERE a.Id = b.Id = c.Id
VS
WHERE a.Id = b.Id and b.Id = c.Id
我在以下SQLFiddle中获得了这两个查询的不同结果:http://sqlfiddle.com/#!2/725396/3
答案 0 :(得分:4)
根据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
类型为equivalent to tinyint(1)
,其中0
为false,其他任何内容均为true。因此,它只是一个可以与另一个进行比较的整数值。
此外,比较表达式的结果,例如a = b
will always return 0
表示false,1
表示true,如果有任何输入则为NULL是NULL。
因此,对于表达式a = b = c
为true,它们都不允许为NULL,并且以下之一必须为true:
a
等于b
,c
等于1
;或a
不等于b
,c
等于0
。这几乎肯定不是你想要的,正确的形式是第二个。
答案 1 :(得分:0)
我认为不同之处在于,在第一个WHERE中,所有三个id必须相等,而后者a.id应该等于b.id而b.id应该等于c.id但它不是意味着a.id应该等于c.id。