我在使用GROUP_CONCAT时遇到了麻烦。我很确定这是获得我想要的唯一方法,但它似乎没有给我我需要的结果。
以下是我的发言:
SELECT
b.*,
GROUP_CONCAT(c.finance_code) AS finance_codes
FROM
`oc_finance_breakpoints` b
LEFT JOIN
`oc_finance_breakpoints_codes` c ON c.breakpoint_id = b.breakpoint_id;
这将收集finance_breakpoints表中的数据,结构如下:
breakpoint_id
from_value
to_value
minimum_deposit
以及多个"财务代码"来自我的联接表,finance_breakpoint_codes:
breakpoint_code_id
breakpoint_id
finance_code
断点可能存在多个财务代码。当我只有一个条目运行sql时,我得到以下内容:
1 | 280.00 | 750.00 | 10 | ONIF6,ONIF10,ONIF12
但是如果断点表中有两个条目,那么所有发生的事情就是将额外的财务代码添加到上面的末尾,这意味着我只得到一行包含第一组数据和所有财务代码在一栏中。
理想情况下,我希望能够返回如下内容:
1 | 280.00 | 750.00 | 10 | ONIF6,ONIF10,ONIF12
2 | 750.00 | 1500.00 | 10 | ONIB12-9.9,ONIB24-9.9,ONIB36-9
而不是:
1 | 280.00 | 750.00 | 10 | ONIF6,ONIF10,ONIF12,ONIB12-9.9,ONIB24-9.9,ONIB36-9
有没有办法达到我想要的?我可能使用了错误的功能吗?
答案 0 :(得分:1)
在查询中使用聚合函数(例如GROUP_CONCAT
)可确保它返回聚合结果,而缺少显式分组可确保它返回单个整体摘要行。
您需要在查询末尾添加group by
子句 - 如下所示:
SELECT
b.*,
GROUP_CONCAT(c.finance_code) AS finance_codes
FROM
`oc_finance_breakpoints` b
LEFT JOIN `oc_finance_breakpoints_codes` c
ON c.breakpoint_id = b.breakpoint_id
GROUP BY b.breakpoint_id