在mysql中只选择并显示重复的记录

use*_*036 28 mysql duplicates

这个问题非常简单我出于某种原因无法获得正确的结果来显示重复的记录

Table   : Paypal_ipn_orders
id                              payer_email
1                               susan@gmail.com
2                               ryan@gmail.com   
3                               susan@gmail.com
4                               steve@gmail.com
5                               steve@gmail.com

SELECT id, COUNT( payer_email ) `tot`
FROM paypal_ipn_orders
GROUP BY payer_email
HAVING `tot` >1
Run Code Online (Sandbox Code Playgroud)

样本输出

id       tot
1         2
4         2
Run Code Online (Sandbox Code Playgroud)

预期产出

id       payer_email 
1        susan@gmail.com
3        susan@gmail.com
4        steve@gmail.com
5        steve@gmail.com
Run Code Online (Sandbox Code Playgroud)

我该如何实现这一目标?

lc.*_*lc. 60

SELECT id, payer_email
FROM paypal_ipn_orders
WHERE payer_email IN (
    SELECT payer_email
    FROM paypal_ipn_orders
    GROUP BY payer_email
    HAVING COUNT(id) > 1
)
Run Code Online (Sandbox Code Playgroud)

sqlfiddle

  • 在大桌子里很慢. (3认同)
  • 是的,它在大表或复杂查询中很慢,我们应该使用连接(内部连接)而不是这个 (2认同)

Tim*_*nen 13

IN在我的处境太慢(180秒)

所以我用了一个JOIN(0.3秒)

SELECT i.id, i.payer_email
FROM paypal_ipn_orders i
INNER JOIN (
 SELECT payer_email
    FROM paypal_ipn_orders 
    GROUP BY payer_email
    HAVING COUNT( id ) > 1
) j ON i.payer_email=j.payer_email
Run Code Online (Sandbox Code Playgroud)


Gau*_*pta 5

这是一个简单的例子:

select <duplicate_column_name> from <table_name> group by <duplicate_column_name> having count(*)>=2
Run Code Online (Sandbox Code Playgroud)

它肯定会起作用。:)