如何通过单条SQL查询获取每个图书集合的标题与作者合并结果?
解决方案
你需要通过分组聚合将同一图书集合的标题和作者合并到一行。核心思路是用MAX()(或MIN())函数提取每个分组下有效的标题和作者值,再按collection_id分组。
修改后的SQL查询如下:
SELECT c.collection_id, MAX(CASE WHEN cd.detail_type = 'title' THEN cd.detail_value END) AS title, MAX(CASE WHEN cd.detail_type = 'author' THEN cd.detail_value END) AS author FROM collections c LEFT JOIN collection_details cd ON c.collection_id = cd.collection WHERE cd.detail_type IN ('title', 'author') GROUP BY c.collection_id;
补充说明:
MAX()函数会忽略NULL值,因此每个collection_id分组下,只会保留有效的标题和作者值。- 使用
IN ('title', 'author')替代OR,逻辑更清晰且性能更优。 - 如果需要保留没有标题或作者的图书集合(即使这两个字段为
NULL),可以去掉WHERE条件,确保collections表的所有记录都被返回。
如果你的数据库支持PIVOT语法(如SQL Server、Oracle),也可以用透视表实现,但上述CASE+聚合的写法兼容性更强,适用于大多数关系型数据库(MySQL、PostgreSQL、SQLite等)。
内容的提问来源于stack exchange,提问作者Switch88
相关产品推荐
相关产品推荐

