繁体   English   中英

在单个语句中从多个表中删除行

[英]Delete rows from multiple tables in a single statement

我有 2 个表,表示usersarticles ,我还需要从文章中删除一个用户和该用户的所有实例,但我需要在一个语句中完成。 所以我不能说:

DELETE FROM users WHERE id = 1
DELETE FROM articles WHERE user_id = 1

有没有办法我可以这样说:

SELECT u.name, u.id, a.user_id
FROM users u, articles a
WHERE u.id = a.user_id
DELETE FROM thistable
WHERE id = 1

任何帮助将不胜感激

执行此操作的标准方法是将外键声明为ON DELETE CASCADE 这样做,如果user被删除,与其相关的所有articles也将被删除。

CREATE TABLE articles (
  user_id int REFERENCES users (id) ON DELETE CASCADE);

演示: db<>fiddle

如果由于某种原因您无法更改表结构,请考虑使用DELETE ... RETURNING from users内的 CTE 然后在articles的外部DELETE使用返回的值:

WITH j (id) AS (
  DELETE FROM users WHERE id = 1
  RETURNING id
)
DELETE FROM articles a USING j 
WHERE a.user_id = j.id;

演示: db<>fiddle

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM