Nie jestem niestety dobry w temacie baz danych i próbuję się dopiero uczyć. Proszę więc o wyrozumiałość i pomoc w napisaniu następującego selecta.
Mam 3 tabele:
dokumenty [id_dokumnetu, numer];
uzytkownicy_dokumenty [id_uzydok, id_dokumnetu(FK), id_user(FK)];
uzytkownicy [id_user, nazwa];
- Tabela dokumenty i uzytkownicy_dokumenty łączą się relacją jeden do wielu.
- Tabela uzytkownicy i uzytkownicy_dokumenty również łączą się relacją jeden do wielu.
- Jeden dokument może być więc przypisany do wielu użytkowników, jak i jeden użytkownik może być przypisany do wielu dokumentów.
Założeni jest takie, że wszystkie dokumenty powinny być powiązane ze wszystkimi użytkownikami. Próbuję więc napisać zapytanie, które wyrzuci mi wszystkie rekordy dokumentów i użytkowników, które nie są jeszcze powiązane ze sobą. Czyli wszystkie dokumenty, których dany użytkownik jeszcze nie obsługuje (nie ma jeszcze powiązania w tabeli uzytkownicy_dokumnety)
select
d.id_dokumentu, d.numer, ud.*, u.user, u.nazwa
from
dokumenty d left join uzytkownicy_dokumenty ud on d.id_dokumentu = ud.id_dokumentu
right join uzytkownicy uzy on uzy.id_user = ud.id_user
where
not exists (select ud1.id_uzydok from uzytkownicy_dokumenty ud1 where ud1.id_user = uzy.id_user and ud1.id_dokumentu = d.id_dokumentu)
Będę wdzięczny za pomoc.