我正在使用以下架构:
CREATE TABLE person (
person_name VARCHAR PRIMARY KEY
);
CREATE TABLE pet (
animal_name VARCHAR,
person_name VARCHAR REFERENCES person(person_name),
PRIMARY KEY (animal_name, person_name)
);
我想创建一个表,在其中,对于每个 person_name
,我都会得到一个包含该人的宠物的数组。我正在使用 PostgreSQL 9.3.4。
我在每个表中都有以下值:
人
PERSON_NAME
-----------
Alice
Bob
宠物
ANIMAL_NAME | PERSON_NAME
-------------------------
Woof | Alice
Meow | Alice
我想创建下表:
PERSON_NAME | PETS
--------------------------
Alice | {Woof, Meow}
Bob | {}
但是,我不能创建空数组。我得到的是以下内容:
PERSON_NAME | PETS
--------------------------
Alice | {Woof, Meow}
Bob | {NULL}
这是我正在使用的查询:
SELECT
person.person_name,
array_agg(pet.animal_name) AS pets
FROM
person LEFT JOIN pet ON person.person_name = pet.person_name
GROUP BY
person.person_name
;
我明白为什么我得到的数组里面有 NULL
值,我想知道如何得到一个空数组。
这是一个fiddle使用创建模式所需的代码,插入值以及我正在使用的查询。网站中显示的结果不显示 NULL
值,尽管它在那里。
编辑
结果将被解析为 JSON,这就是为什么 {NULL}
不是可接受的结果,因为它将被解析为 [null]
,这是不同的来自 []
我需要的。出于同样的原因,类似 {""}
的结果也是 Not Acceptable 。
最佳答案
我只想补充一下,这是 6 岁
array[]::varchar[]
关于sql - 使用 PostgreSQL 在 SQL 查询中创建一个空数组,而不是内部包含 NULL 的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23924815/