Łączenie tabel z left join

0

Witam, posiadam 3 tabele
noclegi: id_noclegu, nazwa (info o obiektach noclegowych)
noclegi_pokoje: id_noc, id_pokoju, cena (pokoje i ich cena które występują w danym obiekcie noclegowym)
pokoje: id_pokoju, nazwa_pokoju (nazwy różnych pokojów)

Chciałbym otrzymać nazwy pokojów, których brakuje w tabeli noclegi_pokoje dla danego id noclegu tzn ze np dany pokój (1-osobowy) nie istnieje w danym obiekcie noclegowym.
Mam takie zapytanie:

 SELECT * FROM  pokoje LEFT  JOIN noclegi_pokoje on noclegi_pokoje.id_pokoj=pokoje.id_pokoj LEFT JOIN noclegi on noclegi.id_noclegu=noclegi_pokoje.id_noc where noclegi_pokoje.id_noc is null and noclegi.id_noclegu=1

ale coś namieszałem bo otrzymuje zero wyników, mógłby ktoś mnie poprawić

0

Tak?:

SELECT * FROM  pokoje LEFT  JOIN noclegi_pokoje ON noclegi_pokoje.id_pokoj=pokoje.id_pokoj LEFT JOIN noclegi ON noclegi.id_noclegu=noclegi_pokoje.id_noc AND noclegi.id_noclegu=1 WHERE noclegi_pokoje.id_noc IS NULL
0

Dane zapytanie zwróci listę pokojów które nie posiadają id w tabeli noclegi_pokoje, czyli które nie zostało jeszcze przypisane do żadnego id noclegu, problem z tym że zapytanie nie 'łapie' by ukazać listę której nie ma dla wybranego id noclegu, tylko pokazuje pokój którego wgl nie ma w tabeli noclegi_pokoje. Ma ktoś inny pomysł ?

1

select pok.nazwa from pokoje pok where
pok.id_pokoju not in (
select
np.id_pokoju
from noclegi_pokoje np
where
np.id_noclegu = 3)

gdzie w ostatniej linijce podajesz id_noclegu tak jak pisałeś, ja dla przykładu wpisałem 3.
Jak widzisz nie ma złączenia left join oraz tabeli noclegi wystarczy id_noclegu z tabeli noclegi_pokoje.

1 użytkowników online, w tym zalogowanych: 0, gości: 1