求助:按相同ID合并单列数据,GROUP_CONCAT结果不符合预期
解决GROUP_CONCAT合并所有数据的问题
嘿,我看你遇到的问题是用GROUP_CONCAT的时候,结果把所有符合条件的serviceItemId都合并到一起了,而不是按每个booking记录分别合并对应的服务项ID对吧?这是因为你漏掉了GROUP BY子句——聚合函数得知道按什么维度分组才行!
问题原因
GROUP_CONCAT是聚合函数,默认如果没有指定GROUP BY,数据库会把所有查询结果当成一个单独的分组,自然就把所有serviceItemId都合并成一个字符串了。你需要告诉数据库:“按照每个booking的唯一记录来分组,把每组里的serviceItemId合并起来”。
修改后的SQL代码
SELECT A.bookId, A.bookDate, A.serviceDate, A.bookTime, A.status, GROUP_CONCAT(C.serviceItemId SEPARATOR ',') AS Servis, B.custId, B.custFname, B.custLname, B.custContact, B.custEmail, B.gender FROM booking A JOIN booking_service C on A.bookId = C.bookId JOIN customer B ON B.custId = A.cust_fk WHERE A.cust_fk = 4 GROUP BY A.bookId, A.bookDate, A.serviceDate, A.bookTime, A.status, B.custId, B.custFname, B.custLname, B.custContact, B.custEmail, B.gender ORDER BY A.bookId
关键修改说明
我在查询里添加了GROUP BY子句,并且把SELECT语句中所有没有被聚合的字段都列在了GROUP BY里。这样数据库就会按照这些字段的组合来分组——也就是每个唯一的booking记录对应一个组,然后把每个组里的C.serviceItemId用逗号分隔合并到Servis字段中,这样每个bookId只会返回一行,对应的服务项ID也会正确合并在一起。
你可以运行这个修改后的代码试试,应该就能得到你预期的结果了!
内容的提问来源于stack exchange,提问作者jack98
相关产品推荐
相关产品推荐

