postgreSQL-为什么这个结果为true



考虑以下SQL片段:

CREATE TABLE product 
(
id integer, 
stock_quantity integer
);
INSERT INTO product (id, stock_quantity) VALUES (1, NULL);
INSERT INTO product (id, stock_quantity) VALUES (2, NULL);
SELECT * 
FROM product 
WHERE (id, stock_quantity) NOT IN ((1, 2), (2, 9));

我不明白为什么它什么都不选。我在用Postgres。

我希望返回这两行,因为我希望(1,NULL(和(2,NULL(不在((1,2(,(2,9((中。

例如,如果我将NULL替换为0,它会返回这两个结果。

为什么设计成这样?我错过了什么?

谢谢!

将null视为丢失的数据。例如,如果我们有一列";出生日期";。

例如,考虑一个数据库,其中有三个人出生在1975年和1990年,而我们不知道第三个人的出生日期。我们知道第三人确实出生了,但我们还不知道它的出生日期。

现在,如果一个查询搜索的人";不是1990年出生的";?那只会返回第一人称。

第二个人出生于1990年,因此显然无法入选。

对于第三个人,我们不知道她的出生日期,所以我们不能说任何关于她的事情,查询也不会选择她。这有道理吗?

最新更新