我有这张桌子
id | present
------------
A | false
B | null
C | null
D | false
E | false
并执行此查询
SELECT array_agg(id)
FROM above_table
WHERE present IS NULL
我希望这会返回一行
B C
但我得到一个空行。
如果我这样做
SELECT array_agg(id)
FROM above_table
WHERE present = 'false'
我得到一排
A D E
关于为什么IS NULL
没有返回数组的任何想法?
答案 0 :(得分:1)
您的表格定义或测试有问题。
如果将列present
定义为布尔值,并且id为B和C的行确实为NULL,那么您的第一个查询将给出您期望的内容。
我的控制台日志:
strobel=# create table quest (id character, present boolean);
CREATE TABLE
strobel=# insert into quest values ('A',false);
INSERT 0 1
strobel=# insert into quest values ('D',false);
INSERT 0 1
strobel=# insert into quest values ('E',false);
INSERT 0 1
strobel=# insert into quest(id) values ('B');
INSERT 0 1
strobel=# insert into quest(id) values ('C');
INSERT 0 1
strobel=# select * from quest order by 1;
id | present
----+---------
A | f
B |
C |
D | f
E | f
(5 Zeilen)
strobel=# SELECT array_agg(id) FROM quest WHERE present IS NULL;
array_agg
-----------
{B,C}
(1 Zeile)
答案 1 :(得分:1)
CREATE TABLE above_table
("id" varchar(1), "present" boolean)
;
INSERT INTO above_table
("id", "present")
VALUES
('A', false),
('B', NULL),
('C', NULL),
('D', false),
('E', false)
;
SELECT array_agg(id)
FROM above_table
WHERE present IS NULL;
array_agg
B,C
我怀疑还有其他事情发生了。您是否认为可以在多个模式中使用相同的表名,并且您是从正确的模式中提取的?