如何删除使用外排加盟(How to delete rows using an outer join)

2019-08-31 07:56发布

我得从一个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

查询工作,但不会删除任何东西,尽管这正是在商务部解释说: http://www.postgresql.org/docs/current/static/sql-delete.html 。

是我的问题,是由于IS NULL查询还是我失去了一些东西?

Answer 1:

良好的工作,晒太阳。 次要建议:当使用EXISTS / NOT EXISTS你不需要SELECT * 。 一个常见的约定( 文档 )是只写SELECT 1是这样的:

DELETE FROM url WHERE NOT EXISTS (
  SELECT 1 FROM link_type WHERE url.link_type = link_type.id 
);

在功能上,两者的工作方式。



Answer 2:

还是不明白,为什么我以前的查询不起作用(如果有人可以解释,将是不错),但这里是我的伎俩:

DELETE FROM url WHERE NOT EXISTS (SELECT * FROM link_type WHERE url.link_type = link_type.id );


文章来源: How to delete rows using an outer join