相关疑难解决方法(0)

奇怪的"所有"在"哪里"

问题存在于MySQL的最新版本中,所以我甚至怀疑这可能是一个错误.

这是两个表:

t1(id int), values (10),(2)
t2(id int), values (0),(null),(1)
Run Code Online (Sandbox Code Playgroud)

执行:

select id from t1 where id > all (select id from t2);
Run Code Online (Sandbox Code Playgroud)

返回结果集:

+------+
| id   |
+------+
|   10 |
|    2 |
+------+
Run Code Online (Sandbox Code Playgroud)

根据我的知识和页面http://dev.mysql.com/doc/refman/5.5/en/all-subqueries.html

该语句应返回空结果!因为"where"中的每个判断都会导致null,如下所示:

select id > all (select id from t2)  as c1 from t1;
Run Code Online (Sandbox Code Playgroud)

收益:

+------+
| c1   |
+------+
| NULL |
| NULL |
+------+
Run Code Online (Sandbox Code Playgroud)

实际上select id from t1 where null;什么也没有回报

最后,我尝试了这个:

explain extended select id from t1 where …
Run Code Online (Sandbox Code Playgroud)

mysql sql

8
推荐指数
2
解决办法
450
查看次数

未明确说明时选择不包括空值

我用的时候

Select Distinct Brand_ID
from db.ABC
WHERE
Brand_ID <> 800
Run Code Online (Sandbox Code Playgroud)

我得到了返回的输出:

+----------+
| Brand_ID |
+----------+
|      100 |
|      200 |
|      300 |
|      400 |
|      500 |
|      600 |
|      700 |
|      900 |
+----------+
Run Code Online (Sandbox Code Playgroud)

但是,该列确实包含NULL值,它们存在.我需要更新我的select语句以明确说:

Select Distinct Brand_ID
from db.ABC
WHERE
Brand_ID <> 800 OR Brand_ID IS NULL
Run Code Online (Sandbox Code Playgroud)

要获得正确的输出:

+----------+
| Brand_ID |
+----------+
| NULL     |
| 100      |
| 200      |
| 300      |
| 400      |
| 500      |
| …
Run Code Online (Sandbox Code Playgroud)

sql sql-server

2
推荐指数
1
解决办法
64
查看次数

标签 统计

sql ×2

mysql ×1

sql-server ×1