Ответ 1
По-прежнему не понимаю, почему мой предыдущий запрос не работает (если кто-то может объяснить, было бы хорошо), но вот как я сделал трюк:
DELETE FROM url WHERE NOT EXISTS (SELECT * FROM link_type WHERE url.link_type = link_type.id );
У меня проблема с удалением записей из таблицы PostgreSQL с помощью LEFT JOIN
.
Я хочу удалить строки, которые я получаю со следующим запросом:
SELECT * FROM url
LEFT JOIN link_type ON url.link_type = link_type.id
WHERE link_type.id IS NULL
Чтобы сделать это, вот что я сделал:
DELETE FROM url
USING link_type
WHERE url.link_type = link_type.id AND link_type.id IS NULL
Query работает, но ничего не удаляет, хотя именно это объясняется в документе: http://www.postgresql.org/docs/current/static/sql-delete.html.
Является ли моя проблема из-за IS NULL
в запросе или я что-то не хватает?
По-прежнему не понимаю, почему мой предыдущий запрос не работает (если кто-то может объяснить, было бы хорошо), но вот как я сделал трюк:
DELETE FROM url WHERE NOT EXISTS (SELECT * FROM link_type WHERE url.link_type = link_type.id );
Хорошая работа, солнце. Незначительное предложение: при использовании EXISTS/NOT EXISTS вам не нужно SELECT *
. Общее соглашение (docs) состоит в том, чтобы просто написать SELECT 1
следующим образом:
DELETE FROM url WHERE NOT EXISTS (
SELECT 1 FROM link_type WHERE url.link_type = link_type.id
);
Функционально, оба способа работают.