为了简化我的问题:假设我有3张 table 。

Rooms              People                    Things
--------           --------                  --------
id| name           id | name | fk_rooms      id | name | fk_rooms
-----------        ---------------------     ---------------------
1 | kitchen        1  | John | 1              1 | TV   | 2
2 | bedroom        2  | Mary | 2              2 | bed  | 2
                   3  | Andy | 1              3 | sink | 1
                   4  | Laura| 1

现在我正在做类似的事情:
SELECT r.name AS room_name, p.name AS name, t.name AS thing FROM Rooms r
LEFT JOIN People p ON p.fk_rooms = r.id
LEFT JOIN Things t ON t.fk_rooms = r.id

在我看来,除了与“房间”表具有多对一关系的少数几个之外,它的工作原理非常完美。因此,我希望只接收两行,而不是结果集中的新行与“Rooms”表具有不同的“People”和“Things”名称。
1. kitchen, John, Andy, Laura, sink
2. bedroom, Mary, TV, bed

r.id上的GROUP BY将仅select每个表中的一行。任何帮助深表感谢!

最佳答案

这是您要查找的内容:

SELECT r.name AS room_name,
   GROUP_CONCAT(p.name separator ',') AS people_name,
   GROUP_CONCAT(t.name separator ',') AS things
FROM Rooms r
LEFT JOIN People p ON p.fk_rooms = r.id
LEFT JOIN Things t ON t.fk_rooms = r.id
GROUP BY r.id

关于MySQL左连接多对一,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16680974/

10-10 05:42