2017-08-30 56 views
1

我有一個mysql數據庫,其中包含一個包含以下列的表:PartCode,Price和Quantity。目標是編寫一個查詢,查詢具有重複「PartCode」的行,然後通過價格和數量進行比較,並刪除具有較高「價格」值的行,但如果其中一個「數量」爲0,則爲刪除0數量的那個。mysql按列A搜索重複項並按其他條件刪除

A sample table would look like this: 
PartCode - Price - Quantity 
ABCD  - 5 -  2 
CDEF  - 6 -  1 
CDEF  - 4 -  1 
VZXY  - 8 -  4 
VZXY  - 7 -  0 
....  - ... - ... 

And for the results, I'd like to get this: 
PartCode - Price - Quantity 
ABCD  - 5 -  2 
CDEF  - 4 -  1 
VZXY  - 8 -  4 
....  - ... - ... 

我已經找到了解決方案,以獲得所有重複PartCodes:

SELECT `PartCode` FROM `Table` GROUP BY `PartCode` HAVING COUNT(*) > 1 

我想不出什麼,是如何實現它來刪除重複的一個,其他欄目比較。

在此先感謝。

回答

0

以下查詢將從具有最高數量的每個PartCode組中刪除一條記錄,或者如果一條記錄的數量爲零,則會將其刪除。

DELETE 
FROM yourTable t1 
WHERE (PartCode, Quantity) IN 
(
    SELECT 
     t.PartCode, 
     t.qty 
    FROM 
    (
     SELECT 
      PartCode, 
      CASE WHEN MIN(Quantity) = 0 THEN MIN(Quantity) ELSE MAX(Quantity) END AS qty 
     FROM yourTable 
     GROUP BY PartCode 
     HAVING COUNT(*) > 1 
    ) t 
) 
+0

感謝您的快速回復,但作爲初學者,我有一些後續。首先,我在第一個't1'出現錯誤,我不完全明白。其次,從我所瞭解的情況來看,具有數量的「CASE WHEN」部分選擇了較高的數量,我最終將這些重複行的結果合併爲一個,而我正在尋找刪除該行,而不符合我的標準(這我沒有在我原來的問題中澄清)。第三,如果將來我會有兩個以上的副本,邏輯應該如何改變?再次感謝! – Paulius

+0

@Paulius艱難的查詢,我的第一種方法是錯誤的,請嘗試我的更新。 –

+0

因此,經過幾次嘗試,我刪除了「t1」,並發現SQL提供了一個錯誤,因爲我想從第8行中稍後調用的同一個「yourTable」中刪除。當我在第2行中更改「yourTable」時,到另一個表,並且只在第8行中引用「yourTable」,它就通過了。有什麼辦法可以解決這個問題嗎?或者我應該創建一個重複的表,只是爲了執行這個查詢?我得到的錯誤是這樣的:「#1093 - 你無法在FROM子句中指定目標表'MergedData'進行更新」 – Paulius