如何解决为什么在有空值时选择 IN 不能正常工作
为什么会在 EXASOL DBMS 中返回一条记录
SELECT a,b FROM (SELECT NULL AS a,'b' AS b) t
WHERE (a,b) NOT IN (SELECT NULL,'b')
?
谢谢,拉斐尔。
解决方法
因为(NULL = NULL) <> True
create table three(
one integer
);
INSERT INTO three(one) VALUES(1),(2),(NULL);
SELECT one.one AS one,two.one AS two,one.one = two.one AS diff
FROM three one
CROSS JOIN three two
;
结果:
CREATE TABLE
INSERT 0 3
one | two | diff
-----+-----+------
1 | 1 | t
1 | 2 | f
1 | |
2 | 1 | f
2 | 2 | t
2 | |
| 1 |
| 2 |
| |
(9 rows)
因此,将任何内容与 NULL 进行比较都会导致 NULL,不是真或假。
就您而言,您正在比较元组,而不是标量。对于元组,情况更糟:如果元组之一的任何元素为 NULL,则比较结果既不是 True 也不是 False。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。