zapytanie Left- join i 2 selecty

0

witajcie mam takie pytanko mam 2 tabele
kategoria z polami kategoria_id oraz kategoria_specjalna
oraz dostep z polami dostep_kategoria_id , dostep_user_id , dostep_typ

musze zrobić cos takiego:

wybrać wszystkie kategoria_id z tabeli kategoria gdzie kategoria_specjalna =0
lub
kategoria_specjalna = 1 Ale wtedy w tablicy dostep musi być numer tej kategorii
wraz z numerem usera

innymi słowy musze zrobić left joina wyniku

SELECT kategoria_id
FROM kategoria
WHERE kategoria_specialna =0
OR kategoria_specialna =1
AND kategoria_id
IN (

SELECT dostep_kategoria_id
FROM dostep
WHERE dostep_user_id =2
)

oraz

SELECT dostep_kategoria_id, dostep_typ
FROM dostep
WHERE dostep_user_id =2
 

na dostep_kategoria_id = kategoria_id jak tego dokonać :)

chcę w wyniku dostac cos takiego

mając nastepujace dane:

KATEGORIA
kategoria_id| kategoria_specjalna

 1           |           0
 2           |           1
 3           |           1

oraz
DOSTEP
dostep_kategoria_id | dostep_typ | dostep_user_id

     2                   |      8           |        1

chce dostać dla usera 1

kategoria_id | dostep_typ

 1            |     NULL          <- poniewaz nie jest specjalna
 2            |     8             <- ponieważ jest specjalna ale user nr 1 widnieje w tabeli dostep przy dostep_kategoria_id 

Probowałem skonstruować left joina łączac oba zapytania ale jakos nie działa proszę o małą pomoc :)

0

Spróbuj tak:

SELECT k.kategoria_id, d.dostep_typ FROM kategoria k
LEFT JOIN dostep d on (k.kategoria_id = d.dostep_kategoria_id)
WHERE k.kategoria_specialna = 1 AND d.dostep_user_id = <numer usera>
UNION ALL
SELECT k.kategoria_id, null FROM kategoria k where k.kategoria_specialna = 0

Nie mam pod ręką mysql'a, żeby sprawdzić, ale powinno działać.

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