mysql嵌套等于表达式

问题描述

为什么此查询返回MysqL表中的所有行?

https://www.db-fiddle.com/f/9by6GKNcQfNE2NTvLywtxR/2

-模式sql

CREATE TABLE test (
  u char(100),p char(100)
);
INSERT INTO test (u,p) VALUES ('admin','adminp');
INSERT INTO test (u,p) VALUES ('michelle','michellep');

-查询sql

SELECT * FROM test where p=p=1

解决方法

在求值p=p=1时,该表达式首先求值p=p,这是微不足道的(编辑:至少对于p的任何非NULL值)。也就是说,p列在给定行上始终等于其自身。

在MySQL中(不同于标准SQL),布尔值 true 实际上是整数1。因此p=p的计算结果是整数1。

然后将1与表达式中的1进行比较,这种比较将始终为真。

目前尚不清楚您打算p=p=1测试什么。

,

mysql从左写到

p=p 

始终为真

 true  = 1

并且mysql将true设置为1,将false设置为0

所以表达式始终为真

正如Akina指出的那样,p is NULL

同情心将返回假,如https://www.db-fiddle.com/f/9by6GKNcQfNE2NTvLywtxR/3

,

WHERE子句中的条件:

p = p = 1

等效于:

(p = p) = 1

并且因为没有空值,所以表达式:

p = p

始终为true,对于MySql而言,它等于1
因此整个表达式等同于:

1 = 1

始终为true