SQL GROUP_CONCAT无法与2个表联接一起使用

时间:2018-10-23 20:04:31

标签: mysql sql concat group-concat

我有这个查询,它按预期工作:

查询

SELECT name, date, enddate, abo_name, bill_id
FROM (
    SELECT CONCAT(c.firstname, " ", c.surname) AS name, GROUP_CONCAT(b.date) AS date, GROUP_CONCAT(b.endDate) AS enddate, GROUP_CONCAT(b.abo_id) AS abo_name, GROUP_CONCAT(b.id) AS bill_id
    FROM customer c
    LEFT JOIN bill b ON c.id = b.customer_id
    GROUP BY name
) t

输出(JSON)

{
    name: "Max Mustermann",
    date: "2018-09-13,2018-09-27",
    enddate: "2018-09-13,2018-09-28",
    abo_name: "1,2",
    bill_id: "23,27"
},
...

但是现在我需要向abo_name属性添加更多详细信息,我需要输出完整的abo名称。我试图在查询中添加一个INNER JOIN,但是GROUP_CONCAT不再起作用。

这里是例子:

查询

SELECT name, date, enddate, abo_name, bill_id
FROM (
    SELECT CONCAT(c.firstname, " ", c.surname) AS name, GROUP_CONCAT(b.date) AS date, GROUP_CONCAT(b.endDate) AS enddate, GROUP_CONCAT(a.name) AS abo_name, GROUP_CONCAT(b.id) AS bill_id
    FROM customer c
    LEFT JOIN bill b ON c.id = b.customer_id
    INNER JOIN abo a ON b.abo_id = a.id
    GROUP BY name
) t

输出(JSON)

{
    name: "Max Mustermann",
    date: "2018-09-13",
    enddate: "2018-09-13",
    abo_name: "Einzelstunde",
    bill_id: "23"
},
{
    name: "Max Mustermann",
    date: "2018-09-27",
    enddate: "2018-09-28",
    abo_name: "Schnupperstunde",
    bill_id: "27"
},

如您所见,数据没有合并,并且创建了2个对象。有人知道为什么会这样吗?

感谢您的时间和帮助!

1 个答案:

答案 0 :(得分:2)

abo有一个名为name的列。通过表达式进行汇总或使用其他别名:

SELECT CONCAT(c.firstname, ' ', c.surname) AS new_name, GROUP_CONCAT(b.date) AS date, GROUP_CONCAT(b.endDate) AS enddate, GROUP_CONCAT(a.name) AS abo_name, GROUP_CONCAT(b.id) AS bill_id
FROM customer c LEFT JOIN
     bill b
     ON c.id = b.customer_id INNER JOIN
     abo a
     ON b.abo_id = a.id
GROUP BY new_name