2011-03-25 213 views
4
DELETE a,b 
FROM a AS a 
INNER JOIN b AS b ON a.b_id = b.id 
WHERE a.id IN (1,2,3,4) 

上面的查詢只刪除1條記錄,爲什麼?我想刪除所有4條Mysql - 刪除多表

+0

(+1)很好的問題。 – 2011-04-01 15:02:28

回答

-1

DELETE命令不與JOIN

+0

我運行它,並沒有得到任何錯誤通知,但它只刪除兩個表中的第一條記錄?什麼是正確的方式? – Chameron 2011-03-25 16:47:30

+0

試試這個:DELETE a。*,b。* 或者:DELETE * – 2011-03-25 16:53:34

1

我創建了一個測試樣本如下工作:

使用測試
DROP TABLE IF存在;
DROP TABLE IF EXISTS b;
CREATE TABLE a(id INT NOT NULL PRIMARY KEY);
CREATE TABLE b(id INT NOT NULL PRIMARY KEY);插入一個值(1),(2),(3),(4),(5),(6),(7),(8),(9),(10);插入b值(1),(2),(3),(4),(5),(6),(7),(8),(9),(10);
SELECT * FROM a;
SELECT * FROM b;
DELETE a。* FROM INNER JOIN b ON a.id = b.id WHERE a.id IN(1,2,3,4);
SELECT * FROM a;

這裏是我的結果:

lwdba @本地(DB測試)::使用測試
數據庫中更改
lwdba @本地(DB測試):: DROP TABLE IF存在;
Query OK,0 rows affected(0.06 sec)

lwdba @ localhost(DB test):: DROP TABLE IF EXISTS b;
查詢OK,0行的影響(0.06秒)

lwdba @本地(DB試驗):: CREATE TABLE一個(ID INT NOT NULL PRIMARY KEY);
查詢OK,0行的影響(0.23秒)

lwdba @本地(DB試驗):: CREATE TABLE B(ID INT NOT NULL PRIMARY KEY);
查詢OK,0行的影響(0.17秒)

lwdba @本地(DB試驗):: INSERT INTO一個VALUES(1),(2),(3),(4),(5), (6),(7),(8),(9),(10);
查詢行,10行的影響(0.06秒)
記錄:10所顯示的文件:0警告:0

lwdba @本地(DB試驗):: INSERT INTO B值(1),(2),( 3),(4),(5),(6),(7),(8),(9),(10);
查詢OK,10行受影響(0。06秒)
記錄:10重複:0警告:0

lwdba @ localhost(DB test):: SELECT * FROM a;
+ ---- +
| id |
+ ---- +
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| 6 |
| 7 |
| 8 |
| 9 |
| 10 |
+ ---- +
10行中(0.00秒)

lwdba @本地(DB試驗):: SELECT * FROM B;
+ ---- +
| id |
+ ---- +
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| 6 |
| 7 |
| 8 |
| 9 |
| 10 |
+ ---- +
10行中(0.00秒)

lwdba @本地(DB試驗):: DELETE的a,b從INNER JOIN B關於a.id = b.id WHERE a.id IN(1,2,3,4); Query OK,4 rows affected(0.08 sec)

lwdba @ localhost(DB test):: SELECT * FROM a;
+ ---- +
| id |
+ ---- +
| 5 |
| 6 |
| 7 |
| 8 |
| 9 |
| 10 |
+ ---- +
6行中集合(0.00秒)

lwdba @本地(DB試驗):: SELECT * FROM B;
+ ---- +
| id |
+ ---- +
| 5 |
| 6 |
| 7 |
| 8 |
| 9 |
| 10 |
+ ---- +
6行中集合(0.00秒)

試試看!!!

BTW我刪除「作爲」和「爲B」從您的查詢,我改變a.b_id到A.ID

+0

呵呵謝謝,我的查詢有錯誤(但在我的問題中它正確:D)。 IN('1,2,3,4')代替IN(1,2,3,4)。你只能在表格中刪除? DELETE a。* – Chameron 2011-03-25 17:14:35

+0

我嘗試使用DELETE而不是DELETE a。*進行示例。它工作得很好!實際上,我放回DELETE a,b並運行它。它確實從表a和表b中刪除。我更新了我的答案以反映這一點。謝謝,我現在相信DELETE同時從兩張表中刪除!!! – RolandoMySQLDBA 2011-03-25 17:23:11

+0

你今天給我的教材是你的問題+1。 – RolandoMySQLDBA 2011-03-25 17:28:51