1

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

4

2 回答 2

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类型等价于tinyint(1),其中0为假,其他为真。因此,它只是一个可以与另一个进行比较的整数值。

此外,如果任何输入为 NULL,比较表达式like的结果a = b 将始终返回 0false、1true 或 NULL。

因此,要使表达式a = b = c为真,它们中的任何一个都不允许为 NULL,并且以下条件之一必须为真:

  • a等于b,c等于1; 或者
  • a不等于bc等于0

这几乎肯定不是你想要的,正确的形式是第二种。

于 2015-08-18T03:48:02.393 回答
0

我认为不同之处在于,在第一个 WHERE 中,所有三个 id 都必须相等,而在后者中,a.id 应该等于 b.id 并且 b.id 应该等于 c.id 但这并不意味着 a .id 应该等于 c.id。

于 2015-08-18T03:46:00.987 回答