Подтвердить что ты не робот

Выбор и отображение только дубликатов записей в mysql

Этот вопрос довольно прост. Я почему-то не могу получить правильный результат для отображения только дубликатов записей

Table   : Paypal_ipn_orders
id                              payer_email
1                               [email protected]
2                               [email protected]   
3                               [email protected]
4                               [email protected]
5                               [email protected]

SELECT id, COUNT( payer_email ) `tot`
FROM paypal_ipn_orders
GROUP BY payer_email
HAVING `tot` >1

вывод проб

id       tot
1         2
4         2

ожидаемый выход

id       payer_email 
1        [email protected]
3        [email protected]
4        [email protected]
5        [email protected]

Как это сделать?

4b9b3361

Ответ 1

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
)

sqlfiddle

Ответ 2

В моей ситуации (180 секунд) IN был слишком медленным.

Итак, я использовал вместо JOIN (0,3 сек)

SELECT id, 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

Ответ 3

Получить список всех повторяющихся строк из таблицы:

Select * from TABLE1 where PRIMARY_KEY_COLUMN NOT IN ( SELECT PRIMARY_KEY_COLUMN
FROM TABLE1 
GROUP BY DUP_COLUMN_NAME having (count(*) >= 1))

Ответ 4

вот простой пример:

select <duplicate_column_name> from <table_name> group by <duplicate_column_name> having count(*)>=2

Это будет определенно работать.:)

Ответ 5

Привет, выше ответ не будет работать, если я хочу выбрать одно или несколько значений столбца, которое не одинаково или может быть одинаковым для обеих данных строки

Для примера. Я хочу также выбрать имя пользователя, дату рождения. Но в базе данных имя пользователя не дублируется, но дата рождения будет повторяться, тогда это решение не будет работать.

Для этого используйте это решение Необходимо взять самостоятельное соединение на одном столе /

SELECT  
    distinct(p1.id),  p1.payer_email , p1.username, p1.birth_date

FROM 
    paypal_ipn_orders AS p1 

INNER JOIN paypal_ipn_orders AS p2 

ON p1.payer_email=p2.payer_email

WHERE 

p1.birth_date=p2.birth_date

Выше запрос вернет все записи, имеющие одинаковый адрес электронной почты и дату рождения.

Ответ 6

используйте этот код

 SELECT *  
    FROM  paypal_ipn_orders 
    GROUP BY  payer_email  
    HAVING COUNT( payer_email) >1  

Ответ 7

SELECT id, payer_email FROM paypal_ipn_orders
WHERE payer_email IN (
    SELECT payer_email FROM papypal_ipn_orders GROUP BY payer_email HAVING COUNT(*) > 1)

Ответ 8

Это работает быстрее всего для меня

SELECT
    primary_key
FROM
    table_name
WHERE
    primary_key NOT IN (
        SELECT
            primary_key
        FROM
            table_name
        GROUP BY
            column_name
        HAVING
            COUNT(*) = 1
    );

Ответ 9

Я думаю, что этот путь проще. На выход выводится идентификатор и почтовый адрес плательщика, где электронная почта плательщика находится в более чем одной записи в этой таблице. Результаты сортируются по id.

    SELECT id, payer_email
    FROM paypal_ipn_orders
    WHERE COUNT( payer_email )>1
    SORT BY id;

Ответ 10

Как и этот ответ, хотя вместо этого я использовал временную таблицу:

CREATE TEMPORARY TABLE duplicates (
    SELECT payer_email
    FROM paypal_ipn_orders
    GROUP BY payer_email
    HAVING COUNT(id) > 1
);
SELECT id, payer_email
FROM paypal_ipn_orders AS p
INNER JOIN duplicates AS d ON d.payer_email=p.payer_email;

Ответ 11

SELECT * FROM 'table' t1 join 'table' t2 WHERE (t1.name=t2.name) && (t1.id!=t2.id)

Ответ 12

Попробуйте этот запрос:

SELECT id, COUNT( payer_email ) `tot`
FROM paypal_ipn_orders
GROUP BY id
HAVING `tot` >1

Помогает ли это?