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”那样通过合并来解决吗