Select z tabelu na podstawie braku danych w innej tabeli

0

Cześć
Mam dwie tabele: Parent i Child. Child ma klucz obcy id_parent. Próbuję wyciągnąć z Parent takie rekordy dla których w tabeli Child nie ma takich rekordów z id_parent; tzn robię coś takiego:

SELECT * FROM parent p WHERE status=1 AND (SELECT * FROM child c where p.id = c.id_parent) IS NULL;

Po "and" już jest pseudokod bo w takiej formie to raczej nie zadziała, ale chce żeby było wiadomo o co mi chodzi.
Jakieś pomysły?
Pozdrawiam.

0
select p.* from parent p
right join child c on p.id = c.id_parent 
where p.status = 1
```

Taka składnia nie pokazuje wszystkich z tabeli child?
2
SELECT p.* FROM parent p 
left join child c on  p.id = c.id_parent
WHERE 
status=1 
AND c.id_parent IS NULL;
0

@Panczo: dzięki wielkie! dokładnie o coś takiego mi chodziło.
Pozdr.

0

A teraz takie pytanie: jeśli mam te dane zwrócone tym selectem podanym przez @Panczo i chciałbym je usunąć to czy muszę zrobić to pętlą czy można jakoś prościej? Bo w DELETE nie mogę używać JOIN'ów, ale mógłbym zwrócić tym zapytaniem id i potem w pętli po każdym z nich poiterować i usunąć.
Prostsze pomysły?

0

Nie jestem znawcą Postgre, ale moze USING się tu nada, wołam @Marcin.Miga do odpowiedzi.

Alternatywnie:

DELETE FROM parent
where id not in (select id_parent from child WHERE id_parent IS NOT NULL)
0

Ponownie wielkie dzięki :)
Też kombinowałem z tym USING.

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