DELETE刪除多表數據,怎樣才能同時刪除多個關聯表的數據呢?這里做了深入的解釋:
| 代碼如下 | 復制代碼 |
| 1 delete from t1 where 條件 2 delete t1 from t1 where 條件 3 delete t1 from t1,t2 where 條件 4 delete t1,t2 from t1,t2 where 條件 |
|
category(欄目信息表)和news(新聞數據表)。
category中的id(欄目編號)字段作為該表的主鍵(primary key).唯一標識了一個欄目的信息。
news 中的id字段作為該表的主鍵(primary key).唯一標識了一個欄目的信息。
category_id(欄目編號)字段與category表的id字段相關聯。
1.SQL刪除語句
| 代碼如下 | 復制代碼 |
|
|
|
1、從數據表t1中把那些id值在數據表t2里有匹配的記錄全刪除掉1
| 代碼如下 | 復制代碼 |
| DELETE t1 FROM t1,t2 WHERE t1.id=t2.id 或 DELETE FROM t1 USING t1,t2 WHERE t1.id=t2.id |
|
2、從數據表t1里在數據表t2里沒有匹配的記錄查找出來並刪除掉1
| 代碼如下 | 復制代碼 |
| DELETE t1 FROM t1 LEFT JOIN T2 ON t1.id=t2.id WHERE t2.id IS NULL 或 DELETE FROM t1,USING t1 LEFT JOIN T2 ON t1.id=t2.id WHERE t2.id IS NULL |
|
3、 從兩個表中找出相同記錄的數據並把兩個表中的數據都刪除掉1
| 代碼如下 | 復制代碼 |
| DELETE t1,t2 from t1 LEFT JOIN t2 ON t1.id=t2.id WHERE t1.id=25 | |
注意此處的delete t1,t2 from 中的t1,t2不能是別名
如:1
| 代碼如下 | 復制代碼 |
| delete t1,t2 from table_name as t1 left join table2_name as t2 on t1.id=t2.id where table_name.id=25 |
|
在數據里面執行是錯誤的(MYSQL 版本不小於5.0在5.0中是可以的)
上述語句改 寫成1
| 代碼如下 | 復制代碼 |
| delete table_name,table2_name from table_name as t1 left join table2_name as t2 on t1.id=t2.id where table_name.id=25 | |
Unknown table 'a' in MULTI DELETE的解決辦法
在存儲過程中,調用:
在mysql中多表聯合刪除時,表別名只能在sql中表關聯部分聲明。我們應該避免不是表關聯部分聲明別名,因為這產生歧義的sql,從而產生不是期望的結果,例如在錯誤的表中刪除行,舉個例子來說:
WHERE a1.id=a2.id;
WHERE a1.id=a2.id;
1.如果你為一個表聲明了別名,當你指向這個表的時候,就必須使用這個別名,例如:
DELETE t1 FROM test AS t1, test2 WHERE ...
-- 錯誤的寫法:
DELETE test FROM test AS t1, test2 WHERE ...
3.當前,我們還不能在刪除表的時候,在子查詢中select from相同的表。
