SQL查询选择和分组依据

时间:2014-09-27 15:40:14

标签: mysql sql

我有两个mysql表:

表“面板”:

+--------+----------+---+
| id_panel | name_panel |
+-----------------------+
|    1   | Some name    |
|    2   | Other name   |
+--------+--------------+

表“panel_power”:

+--------+----------+----+
| id_panel | panel_power |
+------------------------+
|    1   |      300W     |
|    1   |      500W     |
|    2   |      450W     |
|    2   |      300W     |
+--------+---------------+

我需要输出具有所有相关功能的面板名称。

像:

Some panel name: 300W, 500W
Other name: 450W, 300W

2 个答案:

答案 0 :(得分:2)

你可以将group concat和concat结合起来将结果放在一列中,但是如果你计划将数据存储在这样的表中,不推荐这样做

SELECT CONCAT(p.name_panel, 
              ': ', 
              GROUP_CONCAT(pp.panel_power ORDER BY pp.panel_power SEPARATOR ', ')
             ) as "Provided Power"
FROM panels p
JOIN panel_powers pp ON p.id_panel = pp.id_panel
GROUP BY p.name_panel

Fiddle Demo

作为旁注,如果您打算将这些数据放在网页上的列表或类似的内容中,我建议您提取与名称面板关联的ID,并将其作为数据ID项目放在您的网页上列表..这样你可以很容易地将它拉出来,因为你需要点击服务器...如果你不这样那么你将不得不尝试解析name_panel以找出它所属的位置

答案 1 :(得分:1)

您可以使用group_concat()功能:

select p.name_panel, group_concat(pp.panel_power separator ', ') as powers
from panels p join
     panel_powers pp
     on pp.id_panel = p.id
group by p.name_panel;