我有这个疑问显示重复的记录
SELECT id, timeOrdered, order_desc, firstname, lastname
FROM `db`.`myTable`
WHERE `myTable`.`customer_number` IN (100, 101, 102, 103, 104, 105)
我试图找到其中的重复记录。如果timeOrdered,order_desc,firstname,lastname是相同的,那么它的重复。
会为
感谢
我有这个疑问显示重复的记录
SELECT id, timeOrdered, order_desc, firstname, lastname
FROM `db`.`myTable`
WHERE `myTable`.`customer_number` IN (100, 101, 102, 103, 104, 105)
我试图找到其中的重复记录。如果timeOrdered,order_desc,firstname,lastname是相同的,那么它的重复。
会为
感谢
查询看什么什么样的价值观有重复:
SELECT t.order_desc,
t.firstname,
t.lastname
FROM db.mytable t
WHERE t.customer_number IN (100, 101, 102, 103, 104, 105)
GROUP BY t.order_desc, t.firstname, t.lastname, t.timeordered
HAVING COUNT(*) > 1
要查看与这些重复相关的整个记录:
SELECT x.*
FROM db.mytable x
WHERE EXISTS(SELECT NULL
FROM db.mytable t
WHERE t.customer_number IN (100, 101, 102, 103, 104, 105)
AND t.order_desc = x.order_desc
AND t.firstname = x.firstname
AND t.lastname = x.lastname
AND t.timeordered = x.timeordered
GROUP BY t.order_desc, t.firstname, t.lastname, t.timeordered
HAVING COUNT(*) > 1)
WHERE x.customer_number IN (100, 101, 102, 103, 104, 105)
SELECT DISTINCT
t1.id
FROM
mytable t1
INNER JOIN mytable t2 ON
t1.timeordered = t2.timeordered AND
t1.order_desc = t2.order_desc AND
t1.firstname = t2.firstname AND
t1.lastname = t2.lastname AND
t1.id <> t2.id
如果例如有3行相等,则此查询将在结果集中生成重复项。一个独特的'可以'帮助。但是,此解决方案使用连接进行比较,大多数情况下速度更快。 +1 :) – SDReyes 2010-09-23 20:36:27
@SDReyes:重复是JOINing的现实;处理2+匹配时EXISTS可以更快,而且不会出现重复结果。 'IN'通常不支持元组(但在MySQL上) – 2010-09-23 20:52:53
@OMG Ponnies:是的。您的解决方案在SQL Server上使用〜100 000行进行79 ms测试。使用连接需要1872ms。真棒:O.恭喜OMG! :) – SDReyes 2010-09-23 21:55:48
[在MySQL中查找重复记录](http:// stackoverf low_questions/854128/find-duplicate-records-in-mysql) – 2010-09-23 20:31:47