[英]Delete rows from multiple tables in a single statement
我有 2 个表,表示users
和articles
,我还需要从文章中删除一个用户和该用户的所有实例,但我需要在一个语句中完成。 所以我不能说:
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.