Sql Postgres未返回数组\u agg查询上的数据,如下所示

Sql Postgres未返回数组\u agg查询上的数据,如下所示,sql,postgresql,sqlalchemy,Sql,Postgresql,Sqlalchemy,当特定图书馆中没有图书数据时,问题就出现了。考虑下面的工作场景。 表名:图书馆 表名:图书 现在,当我进行如下查询时: SELECT library.name, array_agg(b.title) AS book_list FROM library, (SELECT title FROM books WHERE books.library = :library_no) as b WHERE library.id = :library_no GROUP BY library.id 该查询为

当特定图书馆中没有图书数据时,问题就出现了。考虑下面的工作场景。

表名:图书馆

表名:图书

现在,当我进行如下查询时:

SELECT library.name, array_agg(b.title) AS book_list FROM library, 
(SELECT title FROM books WHERE books.library = :library_no) as b 
WHERE library.id = :library_no GROUP BY library.id
该查询为库1和库2生成输出,但不为库3生成输出。为什么以及如何解决这个问题?生成没有图书馆书籍的空列表

所需输出:

----------------------
| name |    book_list |
----------------------
|  GHI |      {}      |   # or {null}
-----------------------
附言:我甚至尝试过如下合并:

SELECT library.name, coalesce(array_agg(b.title), ARRAY[]::VARCHAR[]) AS book_list FROM library, 
(SELECT title FROM books WHERE books.library = :library_no) as b 
WHERE library.id = :library_no GROUP BY library.id

Postgres版本:12

对于以下此类场景,您应该使用left join:

SELECT library.name, array_agg(b.title) AS book_list FROM library, 
(SELECT title FROM books WHERE books.library = :library_no) as b 
WHERE library.id = :library_no GROUP BY library.id
选择 l、 名字, 数组集合标题 从图书馆l左连接图书馆b在l.id=b.library上 其中l.id=3-这里可以使用:library\u no变量传递库id 按l.名称分组
对于这种情况,您应该使用left join,如下所示:

SELECT library.name, array_agg(b.title) AS book_list FROM library, 
(SELECT title FROM books WHERE books.library = :library_no) as b 
WHERE library.id = :library_no GROUP BY library.id
选择 l、 名字, 数组集合标题 从图书馆l左连接图书馆b在l.id=b.library上 其中l.id=3-这里可以使用:library\u no变量传递库id 按l.名称分组
请通过编辑问题来添加所需输出@Akhileshmishrap请通过编辑问题来添加所需输出@AkhileshMishraYes它可以工作。但是当没有数据时,coalesce不应该返回空数组吗?它将返回{NULL}。如果您将使用coalesce,那么它将返回{}。实际上{NULL}和{}是一样的。但是在我的例子中,如果使用coalesce,也不会返回任何列。您到底在寻找什么?这个问题是使用您的解决方案解决的。但是问题不能像上面的“PS”那样用coalesce解决吗?是的,它是有效的。但是当没有数据时,coalesce不应该返回空数组吗?它将返回{NULL}。如果您将使用coalesce,那么它将返回{}。实际上{NULL}和{}是一样的。但是在我的例子中,如果使用coalesce,也不会返回任何列。您到底在寻找什么?这个问题是使用您的解决方案解决的。但是问题不能像上面的“PS”那样通过合并来解决吗