Na początek spróbuje przedstawić uproszczoną wersje moich 3 tabel.
Osoba
---------------
osoba_id
imie
nazwisko
Osoba_has_pokoj
-----------------------------
osoba_id
pokoj_id
Pokoj
---------------
pokoj_id
nr_pokoju
Jest to baza osób z relacją wiele do wielu z tabelą pokoi. Każda osoba może posiadać wiele pokoi w których pracuje oraz pokoje mogą należeć do różnych osób, które w nich pracują.
Dla uproszczenia przykładu zakładam, że w bazie znajduje się jedna osoba o id=1 oraz dwa pokoje o id=1 oraz id=2
Czy jest jakaś możliwość, aby w jednym wierszu wybrać dane osoby (oczywiste) wraz ze wszystkimi pokojami jakie są do niej przypisane.
Chciałbym aby moja tabela wynikowa wyglądała tak:
Id osoby = 1 | Jan | Nowak | Pokoje do których jest przypisany: 234, 235
-------------------------------------------------------------------------------------
Id osoby = 2 | ...
Najbardziej narzucającym się dla mnie rozwiązaniem, jest stworzenie zapytania wybierającego podstawowe dane osoby, a później w pętli zagnieżdzonej, przy pomocy kolejnego zapytania (na podstawie id_osoby) wybierać do jakich pokoi jest przypisana. Jest to jednak bardzo wolne rozwiązanie i mam nadzieje, że da się to inaczej zrealizować w przypadku relacji wiele do wielu.
PS.
Próbowałem również wykorzystać możliwość jaką daję LEFT JOIN
SELECT o.*, p.nr_pokoju
FROM osoba o
LEFT JOIN osoba_has_pokoj ohp ON o.id=ohp.osoba_id
LEFT JOIN pokoj p ON ohp.pokoj_id=p.id
Wynikiem takiego zapytania (dla moich przykładowych danych) jest:
Id osoby = 1 | Jan | Nowak | Pokoje do których jest przypisany: 234
-------------------------------------------------------------------------------------
Id osoby = 1 | Jan | Nowak | Pokoje do których jest przypisany: 235
Czyli de fakto powielanie wierszy wynikowych (a chodzi mi o wynik w jednym wierszu, z dopisywaniem tylko kolejnych pokoi, do których przypisana jest osoba)
Jak można to najłatwiej i najefektywniej osiągnąć?