2012-08-24 28 views
1

我有一個表的格式如下行:在MySQL(複合鍵)查找重複的行

transactionDate, purchaseOrderId 
8/8/2012, 55 
8/9/2012, 55 
8/8/2012, 88 
8/9/2012, 55 
8/10/2012, 77 

我想找到其中transactionDate和purchaseOrderId都是準確的所有行。因此,下面兩行是重複的:

8/9/2012, 55 
8/9/2012, 55 

我使用下面的查詢嘗試:

SELECT 
    transactionDate, purchaseOrderId 
FROM 
    purchases 
GROUP BY 
    transactionDate, purchaseOrderId 
HAVING COUNT(*) > 1; 

但是它返回的8月8日的結果,除了8月9日的結果。如何讓它只返回兩個列都被複制的字段(而不是每個日期都返回所有事務)?

謝謝。

+1

該查詢對我來說看起來是正確的 - 可能值得再次檢查您的數據? – FJT

+0

@FionaT - 我再次看了看,我認爲你確實是對的。我沒有預料會有數百萬行的重複,但我檢查過的隨機行正在重複(表格非常大 - 超過2000萬行)。所以也許我的原始查詢是正確的。 – David

回答

2
SELECT 
    transactionDate, purchaseOrderId, COUNT(*) CNT 
FROM 
    purchases 
GROUP BY 
    transactionDate, purchaseOrderId 
HAVING 
    CNT > 1 
ORDER BY 
    CNT ASC; 
0

將您的transactionDate列更改爲'date'數據類型並以適當的日期格式插入值(即'YYYY-MM-DD')。插入值爲:

INSERT into purchases values ('2012-08-09', 55); 

然後使用您自己的上述書面查詢。它會給你你想要的結果。

+0

該列已處於日期格式,並且具有適當的日期格式。正如我在對我自己的問題的迴應中指出的那樣,我的問題中的查詢已經給出了正確的答案,但我沒有想到會有那麼多重複的行。 – David