2013-08-17 30 views
1

我正在查詢刪除數據庫中用戶的所有記錄。有一個表的用戶:從4個表中刪除基於行的行嗎?

user_id | name 

一個表的帖子

post_id | user_id | post_html 

一個表posts_tags

id | post_id | tag_id 

一個table標籤

id | user_id | tag 

我期待全部刪除從這個鏈接到用戶的記錄4桌... 像

delete from tags t inner join posts_tags bt on t.id = bt.tag_id where ??? 

感謝

+3

只需執行4個「DELETE」查詢。而已。執行多個查詢是完全正確的,而不是單個查詢。或者用'CASCADE'使用外鍵 – zerkms

+0

我必須在表格文章上查詢一段時間才能檢查所有帖子,然後每次將兩個查詢從posts_tags和tags中刪除...這不是很乾淨,不是它? – user2670167

回答

1

我同意zerkms - 你可以使用級聯外鍵。但它可以被寫成SQL查詢過,但如果你有外鍵,你必須這樣做,以正確的順序是這樣的:

delete from posts_tags 
where 
    tag_id in (select id from tags where user_id = <your user id>) or 
    post_id in (select post_id from posts where user_id = <your user id>) 

delete from tags 
where user_id = <your user id> 

delete from posts 
where user_id = <your user id> 

delete from users 
where user_id = <your user id> 
3

你能做到在一個聲明,如果你喜歡:

delete u, p, pt, t 
    from users u join 
     posts p 
     on u.id = p.user_id join 
     posts_tags pt 
     on p.id = pt.post_id join 
     tags t 
     on t.id = pt.tag_id 
    where u.id = @YOURUSERID; 
+0

+1哇,這很酷,它只是MySQL的語法? –

+0

@RomanPekar。 。 。這是MySQL特有的。我不知道是否有其他數據庫以這種方式擴展'刪除'。 (就我個人而言,我通常會使用四個查詢,因爲我使用多個不同的數據庫。) –

+0

不起作用:當我將現有的用戶標識放入「0 lignes modified」... :-( – user2670167