MySQL залишається приєднуватися до багатьох рядків - mysql, виберіть, групову, залиште приєднання

Щоб спростити мою проблему: скажімо, я маю 3 таблиці.

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

який у моєму випадку ідеально працює, крім декількохякі мають багато стосунків з таблицею "Номери". Тому замість нових рядків у наборі результатів, що містять різні назви для "Люди" та "Речі" стосовно таблиці "Номери", я хотів би отримати лише два рядки:

1. kitchen, John, Andy, Laura, sink
2. bedroom, Mary, TV, bed

А. GROUP BY на r.id буде тільки select один рядок від кожного столу Будь-яка допомога високо цінується!

Відповіді:

3 для відповіді № 1

Ось це те, що ви шукаєте:

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

1 для відповіді № 2

Так, вам потрібна група за пунктом, і вам потрібно скористатись GROUP_CONCAT функція Ви повинні об'єднати свої результати за допомогою People.fk_rooms та Thing.fk_rooms.

Можливо, ви можете скористатися двома різними запитами:Перший призведе до об'єднання номерів і людей, згрупованих за допомогою fk_rooms, вибравши три стовпці, вони - RoomsID, ​​RoomName, People, а другий призведе до об'єднання номерів і речей, згрупованих за fk_rooms, вибравши три стовпці, вони є RoomID, RoomName, речі. У вашому запиті ви називаєте ці вибори як t1 і t2 і приєднуйтесь до t1 і t2 за номерамиID, виберіть t1.RoomName, t1.People, t2.Things.

Удачі.


Найбільш популярний