MySQL - WHERE 子句中的多个等价项
MySQL - Multiple equivalencies in WHERE clause
我想知道 MySQL 中的以下两个 WHERE
子句是否有区别:
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 所有三个 id 必须相等,而在后者 a.id 应该等于 b.id 而 b.id 应该等于c.id 但这并不意味着 a.id 应该等于 c.id.
根据 MySQL doco for an expression,您的表达式 a = b = c
使用 boolean_primary
的以下形式:
comparison_operator: = | >= | > | <= | < | <> | !=
boolean_primary:
boolean_primary comparison_operator predicate
因此等同于:
(a = b) = c
这意味着您将从 a = b
中得到一个 truth 值,然后将 that 与 c
进行比较.
在 MySQL 中,boolean
类型为 equivalent to tinyint(1)
,其中 0
为假,其他均为真。因此它只是一个整数值,可以与另一个值进行比较。
进一步比较的结果表达式如a = b
will always return0
为假,1
为真,如果任何输入为 NULL,则为 NULL。
因此,要使表达式a = b = c
为真,其中none个允许为NULL,且下列其中一项必须为真:
a
等于b
,c
等于1
;或
a
不等于b
,c
等于0
.
这几乎肯定不是你想要的,正确的形式是第二个。
我想知道 MySQL 中的以下两个 WHERE
子句是否有区别:
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 所有三个 id 必须相等,而在后者 a.id 应该等于 b.id 而 b.id 应该等于c.id 但这并不意味着 a.id 应该等于 c.id.
根据 MySQL doco for an expression,您的表达式 a = b = c
使用 boolean_primary
的以下形式:
comparison_operator: = | >= | > | <= | < | <> | !=
boolean_primary:
boolean_primary comparison_operator predicate
因此等同于:
(a = b) = c
这意味着您将从 a = b
中得到一个 truth 值,然后将 that 与 c
进行比较.
在 MySQL 中,boolean
类型为 equivalent to tinyint(1)
,其中 0
为假,其他均为真。因此它只是一个整数值,可以与另一个值进行比较。
进一步比较的结果表达式如a = b
will always return0
为假,1
为真,如果任何输入为 NULL,则为 NULL。
因此,要使表达式a = b = c
为真,其中none个允许为NULL,且下列其中一项必须为真:
a
等于b
,c
等于1
;或a
不等于b
,c
等于0
.
这几乎肯定不是你想要的,正确的形式是第二个。