为什么执行以下查询:
SELECT * FROM myTable WHERE id=1=0
返回myTable
中的所有行,但其中有id=1
的行除外?
myTable
内容:
+----+-------+
| id | value |
+----+-------+
| 1 | dog |
| 2 | cat |
| 3 | parrot|
+----+-------+
现在运行:SELECT * FROM myTable WHERE id=1=0
输出:
+----+-------+
| id | value |
+----+-------+
| 2 | cat |
| 3 | parrot|
+----+-------+
答案 0 :(得分:9)
原因是该逻辑应被评估为:
WHERE (id = 1) = 0
这等效于:
WHERE (id = 1) "is false"
或者:
WHERE id <> 1
尝试运行以下示例:
select 1=1=0, 1=2=3, 1=1=0
答案 1 :(得分:7)
默认运算符优先级的工作方式如下:
WHERE (ID=1)=0
在id=1
情况下为假的