Цитирование руководства:
Существует два способа удаления строк в таблице с использованием информации, содержащейся в других таблицах в базе данных: использование вложенных выборок или указание дополнительных таблиц в USINGпредложении . Какой метод больше подходит, зависит от конкретных обстоятельств.
Жирный акцент мой. Использование информации, которая не содержится в другой таблице, немного сложно, но есть простые решения. От арсенала стандартных приемов до ...
... NOT EXISTSанти-полусоединение, вероятно, самое простое и наиболее эффективное для DELETE:
DELETE FROM link_group lg
WHERE NOT EXISTS (
SELECT FROM link_reply lr
WHERE lr.which_group = lg.link_group_id
);
Предполагая (поскольку определения таблиц не предоставлены) в link_group_idкачестве имени столбца для первичного ключа link_group.
Техника @Mihai прокомментировала также хорошо (применяется правильно):
DELETE FROM link_group lg
USING link_group lg1
LEFT JOIN link_reply lr ON lr.which_group = lg1.link_group_id
WHERE lg1.link_group_id = lg.link_group_id
AND lr.which_group IS NULL;
Но поскольку табличное выражение в USINGпредложении объединено с целевой таблицей ( lgв примере) с помощью a CROSS JOIN, вам необходим другой экземпляр той же таблицы в качестве ступеньки ( lg1в примере) для объекта LEFT JOIN, который менее элегантен и обычно медленнее.