[英]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.