2013-07-29 52 views
0

我有2個表用戶和刪除行PD具有公共列i_uid的MySQL從多個表

對於來自兩個具有1010 i_uid單行表刪除出具本人使用PHP的mysqli ::查詢下面的語句腳本

DELETE 
FROM `users`,`pd` 
WHERE `users`.`i_uid`=`pd`.`i_uid` AND `users`.`i_uid` = 1010; 

有什麼問題嗎?

+1

是否當您嘗試它的工作? – Anigel

回答

5

,因爲您要刪除多個表中的行,唯一缺少的是指定什麼表的行會被刪除,

DELETE `users`,`pd` 
FROM `users`, `pd` 
WHERE `users`.`i_uid`=`pd`.`i_uid` AND `users`.`i_uid` = 1010; 
在上面的查詢

,它將從兩個表中刪除行。我建議使用ANSI加入像,下面來改變說法,

DELETE a, b 
FROM users a 
     INNER JOIN pd b 
      ON a.i_uid = b.i_uid 
WHERE a.i_uid = 1010 
如果你想從 users表中刪除

DELETE a 
FROM users a 
     INNER JOIN pd b 
      ON a.i_uid = b.i_uid 
WHERE a.i_uid = 1010 
+0

thanx幫助....你能解釋我的連接語法...通常我用來指定列名前的FROM .... –

+0

這是te錶行將被刪除的源表。這是必要的,因爲你的查詢涉及多個表。 –

+0

是不是我們在FROM之後指定那些表?那麼爲什麼在它之前呢? –

1

使用Left Join,並指明相應的行會被刪除的表。

DELETE users, pd 
FROM users, pd 
LEFT JOIN pd 
ON pd.i_uid = users.i_uid 
WHERE users.i_uid = 1010 
+0

Cheers @ user2439376! – softvar

0

其他答案是正確的,但由於沒有人提到它,我會的。你可以使用InnoDB引擎並指定外鍵和DELETE ON CASCADE。因此,每次刪除用戶時,都會從不同表中刪除所有引用行。

閱讀上外鍵和DELETE CASCADE

0

爲了簡單起見,我建議只使用兩個查詢:

DELETE FROM `users` WHERE `i_uid` = 1010; 
DELETE FROM `pd` WHERE `i_uid` = 1010;