LibreOffice Base SQL查询问题:合并同一父项的子项至同一行
LibreOffice Base 合并子表关联字段为逗号分隔字符串的解决方案
错误原因
你碰到的报错是因为HSQLDB(LibreOffice Base默认数据库引擎)要求:SELECT语句中所有非聚合函数的字段必须出现在GROUP BY子句里,之前的GROUP BY写法没有包含全部必要字段,导致引擎无法识别分组规则。
正确SQL查询语句
使用HSQLDB内置的GROUP_CONCAT聚合函数来合并子表的Child_Name,配合完整的GROUP BY字段列表即可解决问题:
SELECT p.Parent_ID, p.Parent_Name, p.Parent_Contact, GROUP_CONCAT(c.Child_Name SEPARATOR ', ') AS Child_Names FROM "Parent" p LEFT JOIN "Child" c ON p.Parent_ID = c.Childs_parent GROUP BY p.Parent_ID, p.Parent_Name, p.Parent_Contact
关键说明
GROUP_CONCAT:HSQLDB专门用于合并分组内字符串的函数,SEPARATOR参数可自定义分隔符(这里用,实现逗号加空格的格式)。- LEFT JOIN:保留所有父表记录,即使该父项没有对应的子项,此时
Child_Names会显示为NULL;如果只需要显示有子项的父记录,替换为INNER JOIN即可。 - GROUP BY规则:必须包含SELECT中所有未使用聚合函数的字段(即父表的三个字段),这是HSQLDB的硬性要求,也是解决你之前报错的核心。
内容的提问来源于stack exchange,提问作者Bemberlina
相关产品推荐
相关产品推荐

