我在使用 LEFT JOIN
从 PostgreSQL 表中删除记录时遇到问题。
我想删除通过以下查询获得的行:
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
查询有效但不会删除任何内容,尽管这正是文档中解释的内容:http://www.postgresql.org/docs/current/static/sql-delete.html .
我的问题是由于查询中的 IS NULL
还是我遗漏了什么?
最佳答案
干得好,太阳。小建议:使用 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
);
在功能上,这两种方式都有效。
关于postgresql - 如何使用外连接删除行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16034253/