Witam
Mam taki problem:
W tabeli A mam powiedzmy posty.
W tabeli B mam komentarze.
Jak mam sformułować zapytanie aby baza zwróciła mi id_posta który nie ma komentarzy (czyli nie ma rekordów w tabeli B).
Coś jak odwrotny JOIN czyi zwraca mi wszystkie id posta dla których nie ma w tabeli B komentarzy
Oczywiście pole wspólne w A i B to id_posta
Dziękuje za wszelką pomoc
Dodam jeszcze że w tabeli B może być tylko jeden komentarz a wiec jeden post jeden powiązany komentarz o wspólnym id_posta nie trzeba używać count jest albo nie ma jeśli nie ma musi zwrócić id_posta z tabeli A.
SELECT idPostaA FROM A WHERE NOT EXISTS(SELECT idPostaB WHERE idPostaB = idPostaA)
albo
SELECT idPostaA FROM A WHERE idPostaA NOT IN(SELECT idPostaB)
albo
SELECT idPostaA FROM A LEFT JOIN B ON idPostaA = idPostaB WHERE komntarzB IS NULL
Jeśli nie wszystkie to któreś powinno zadziałać.
Szukałem właśnie NOT EXISTS, próbowałem to robić w NOT IN ale mi nie działało wcześniej.
Po przerobieniu pierwszego działa i wygląda to tak:
SELECT pot_id FROM A WHERE NOT EXISTS(SELECT post_id FROM B WHERE B.post_id = A.post_id
Dziękuje za pomoc
select
A.Id
from
A left outer join B on(A.Id=B.Id)
group by
A.Id
having count(B.Id)=0
SELECT DISTINCT p.id
FROM posty as p
LEFT JOIN komentarze as k on k.post_id = p.id
WHERE k.id is null
to zwróci Ci tylko i wyłącznie unikatowe identyfikatory postów, które nie mają komentarzy,
bez liczenia, bez egzistów itp