nun*_*ins 6 sql arrays postgresql
我正在使用以下架构:
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)
);
Run Code Online (Sandbox Code Playgroud)
我希望创建一个表,对于每个person_name,我都会得到一个包含该人宠物的数组。我正在使用PostgreSQL 9.3.4。
我在每个表中有以下值:
人
PERSON_NAME
-----------
Alice
Bob
Run Code Online (Sandbox Code Playgroud)
宠物
ANIMAL_NAME | PERSON_NAME
-------------------------
Woof | Alice
Meow | Alice
Run Code Online (Sandbox Code Playgroud)
我希望创建下表:
PERSON_NAME | PETS
--------------------------
Alice | {Woof, Meow}
Bob | {}
Run Code Online (Sandbox Code Playgroud)
但是,我无法创建空数组。我得到的是以下内容:
PERSON_NAME | PETS
--------------------------
Alice | {Woof, Meow}
Bob | {NULL}
Run Code Online (Sandbox Code Playgroud)
这是我正在使用的查询:
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
;
Run Code Online (Sandbox Code Playgroud)
我明白为什么我要获取包含NULL内部值的数组,我想知道如何获取空数组。
这里是一个小提琴与创建模式,插入值,并与查询我使用的代码。网站中显示的结果没有显示NULL值,尽管它在那里。
编辑
结果将被解析为 JSON,这就是为什么{NULL}不是一个可接受的结果,因为它将被解析为[null],这与[]我的要求不同。出于同样的原因,类似{""}的结果也不是可接受的结果。
最简单的方法是使用ARRAY构造函数的子查询变体:
SELECT
person.person_name,
ARRAY(SELECT animal_name FROM pet WHERE person.person_name = pet.person_name) AS pets
FROM
person;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13015 次 |
| 最近记录: |