Has*_*aig 23 postgresql join delete postgresql-9.3
我在 PostgreSQL 9.3 数据库中有两个表: Tablelink_reply有一个which_group指向 table的外键link_group。
我想删除link_group不link_reply存在相关行的所有行。听起来很基本,但我一直在努力。
会不会像这样简单(不工作)?
DELETE FROM link_group WHERE link_reply = NULL;
Run Code Online (Sandbox Code Playgroud)
Erw*_*ter 27
使用数据库中其他表中包含的信息删除表中的行有两种方法:使用子选择,或在
USING子句中指定附加表。哪种技术更合适取决于具体情况。
大胆强调我的。使用不包含在另一个表中的信息有点棘手,但有简单的解决方案。从标准技术库到...
...NOT EXISTS反半连接可能是最简单和最有效的DELETE:
DELETE FROM link_group lg
WHERE NOT EXISTS (
SELECT FROM link_reply lr
WHERE lr.which_group = lg.link_group_id
);
Run Code Online (Sandbox Code Playgroud)
假设(因为没有提供表定义)link_group_id作为link_group.
@Mihai 评论的技术也有效(正确应用):
DELETE FROM link_group lg
USING link_group lg1
LEFT JOIN link_reply lr ON lr.which_group = lg1.link_group_id
WHERE lg1.link_group_id = lg.link_group_id
AND lr.which_group IS NULL;
Run Code Online (Sandbox Code Playgroud)
但是由于USING子句中的表表达式lg使用 a连接到目标表(在示例中)CROSS JOIN,因此您需要同一个表的另一个实例作为 的垫脚石(lg1在示例中)LEFT JOIN,这不太优雅,通常更慢。
| 归档时间: |
|
| 查看次数: |
23653 次 |
| 最近记录: |