簡體   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