SuN*_*SuN 11 postgresql using left-join
我有一个问题是从PostgreSQL表中删除记录,使用LEFT JOIN.
我想用以下查询删除我得到的行:
SELECT * FROM url
LEFT JOIN link_type ON url.link_type = link_type.id
WHERE link_type.id IS NULL
Run Code Online (Sandbox Code Playgroud)
为此,我做了以下事情:
DELETE FROM url
USING link_type
WHERE url.link_type = link_type.id AND link_type.id IS NULL
Run Code Online (Sandbox Code Playgroud)
查询有效,但不会删除任何内容,尽管这正是文档中解释的内容:http://www.postgresql.org/docs/current/static/sql-delete.html.
我的问题是由于IS NULL在查询中还是我错过了什么?
mar*_*rcj 11
干得好,太阳.次要建议:当使用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
);
Run Code Online (Sandbox Code Playgroud)
从功能上讲,两种方式都有效.
仍然不明白为什么我以前的查询不起作用(如果有人可以解释,会很好),但这是我如何做的伎俩:
DELETE FROM url WHERE NOT EXISTS (SELECT * FROM link_type WHERE url.link_type = link_type.id );
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9427 次 |
| 最近记录: |