postgresql - 如何使用外连接删除行

标签 postgresql left-join using

我在使用 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/

相关文章:

MySQL返回左连接表没有记录的记录

c++ - 使用 using 或 typedef 减少模板参数

C#:是否有一个干净的模式来找到与使用相结合的正确对象?

postgresql - Unicode解码错误: 'ascii' codec can't decode byte in position : ordinal not in range(128)

Postgresql:在某些类型的数字之间插入空格

arrays - 复合类型数组的正确语法

windows - 从提供程序读取数据时发生错误。根据验证程序,远程证书无效

java - 如何通过id创建hibernate关联?

MySQL left join with group by——索引的优化

c# - C#中基类的 `using`指令是否被子类继承?