2014-06-27 66 views
2

如何刪除從一個MySQL表中的所有行,如果兩列的值相等MySQL查詢進行刪除行,如果兩列相等

示例表

invoice_id| item_id | name | invoiced_qty | received_qty 
--------------------------------------------------------- 
| 1  | 1  | item1 | 3   |  2  
| 2  | 2  | item2 | 5   |  5 
| 3  | 1  | item3 | 4   |  3 
| 4  | 2  | item4 | 2   |  2 
| 5  | 1  | item5 | 5   |  5 

刪除表後需要保留

invoice_id| item_id | name | invoiced_qty | received_qty 
--------------------------------------------------------- 
| 1  | 1  | item1 | 3   |  2  
| 3  | 1  | item3 | 4   |  3 

我創建的選擇查詢是

SELECT * FROM table1 A 
INNER JOIN table1 B ON A.item_id = B.item_id 
AND A.invoice_id = B.invoice_id 
AND A.invoiced_qty = B.received_qty 

感謝

回答

5

爲什麼不SQL Fiddle

DELETE FROM table1 
WHERE invoiced_qty = received_qty 

您的編輯不會改變任何東西。他是SQL Fiddle演示您的SELECT查詢。根據您的樣本數據A.invoice_id永遠不會等於B.invoice_id。所以你不會得到任何結果。

+0

即將發佈:P – NeeL

+0

我還需要檢查invoice_id和item_id。相同的item_id,相同的invoice_id和相等的數量 –

+0

根據您提供的樣本數據,您永遠不會在多個記錄中擁有相同的'invoice_id'。看起來你的'invoice_id'是唯一的。所以將表格加入自己是毫無意義的。 – Linger

0

你可以簡單地包裹你的SELECT語句,並選擇值由ID被刪除,就像這樣:

DELETE FROM table1 
WHERE item_id IN (SELECT item_id FROM table1 A 
INNER JOIN table1 B ON A.item_id = B.item_id 
AND A.invoice_id = B.invoice_id 
AND A.invoiced_qty = B.received_qty) 

但是你應該接受靈兒的答案,因爲它是更簡單的解決方案,我的是以表明如果你有一些通常選擇的東西,你可以包裝和刪除。

+0

對不起,我忘了添加一個多列。還有一個invoice_id。我需要檢查invoice_id和item_id。 –

+0

@BineeshVarghese更新了我的答案。 –

0

試試這個:

DELETE FROM table1 A 
INNER JOIN table1 B ON A.item_id = B.item_id 
WHERE A.invoiced_qty = B.received_qty