我有3个表。第一个表保存带有id号的"group_names"。第二个表在element_name旁边保存带有id号和group_id号的"groups_elements"。第三个表保存group_elements之间的关系,其中包括element_id, sub_element_id。我希望获得concat group_name, element_name和element_id数字sub_elements数字。这里是sqlfiddler链接http://sqlfiddle.com/#!2/44f63
我希望得到这样的结果:
Solid Soil 5,6,7
Liquid Oil 8,9,10
你可以这么做
SELECT CONCAT(g.group_name,' , ',e.element_name)
, GROUP_CONCAT(DISTINCT er.sub_element_id)
FROM groups g
JOIN elements e ON(g.id = e.group_id)
JOIN element_subelement_relation er ON(er.element_id= e.id)
GROUP BY g.group_name, e.element_name
演示编辑注释
SELECT CONCAT(g.group_name,' , ',e.element_name) `group_elements`
, GROUP_CONCAT(DISTINCT er.`sub_element_id`) `ids`
FROM groups g
LEFT JOIN elements e ON(g.id = e.group_id)
LEFT JOIN element_subelement_relation er ON(er.element_id= e.id)
GROUP BY g.group_name, e.element_name
HAVING group_elements IS NOT NULL
ORDER BY g.group_name
演示using group_concat()
SELECT g.group_name, group_concat(sub_element_id) as items
FROM elements e INNER JOIN element_subelement_relation er
ON e.id = er.element_id INNER JOIN groups g
ON g.id = e.group_id
GROUP BY g.group_name
演示:http://sqlfiddle.com/# !2/44f63/21
直接在子id上连接并使用group_concat:
select
concat(g.group_name, ' ', e.element_name) as name,
group_concat(sub_element_id order by sub_element_id) as sub_elements
from elements e
inner join groups g on g.id = e.group_id
inner join element_subelement_relation r on r.element_id = e.id
group by name
order by sub_elements, name;
SQL小提琴:http://sqlfiddle.com/! 2/44f63/31。
您可能还想尝试这些:
SELECT g.group_name, e.element_name, concat(g.id,",", e.id,",",esr.id) as ID
FROM element_subelement_relation esr
LEFT JOIN elements e ON(esr.element_id = e.id)
LEFT JOIN groups g ON(e.group_id = g.id)