sql - 使用 PostgreSQL 在 SQL 查询中创建一个空数组,而不是内部包含 NULL 的数组

标签 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)
);

我想创建一个表,在其中,对于每个 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/

相关文章:

java - 我在复制二维数组时遇到问题。该数组如下 - {"A", "B"}, {"01", "02", "03"}, {"XX"}};

sql - 带索引的 postgres 查询计划

sql - 将带有 '(撇号)的文本插入 SQL 表的方法

c - 具有预定义一维数组的二维数组的动态输入

ruby-on-rails - 将元素插入 PostgreSQL 数组而不覆盖它

postgresql - 如何通过查询查找启动 postgresql 的时间

sql - 使用 Total 获取 PostgreSQL 中组百分比的最佳方法是什么

SQL:将字符串转换为数学运算符

sql - 将表名作为参数传递

sql - strip 化 PostgreSQL 结果集的顺序