2012-08-24 29 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