Ответ 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
)
Этот вопрос довольно прост. Я почему-то не могу получить правильный результат для отображения только дубликатов записей
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]
Как это сделать?
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
)
В моей ситуации (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
Получить список всех повторяющихся строк из таблицы:
Select * from TABLE1 where PRIMARY_KEY_COLUMN NOT IN ( SELECT PRIMARY_KEY_COLUMN
FROM TABLE1
GROUP BY DUP_COLUMN_NAME having (count(*) >= 1))
вот простой пример:
select <duplicate_column_name> from <table_name> group by <duplicate_column_name> having count(*)>=2
Это будет определенно работать.:)
Привет, выше ответ не будет работать, если я хочу выбрать одно или несколько значений столбца, которое не одинаково или может быть одинаковым для обеих данных строки
Для примера. Я хочу также выбрать имя пользователя, дату рождения. Но в базе данных имя пользователя не дублируется, но дата рождения будет повторяться, тогда это решение не будет работать.
Для этого используйте это решение Необходимо взять самостоятельное соединение на одном столе /
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
Выше запрос вернет все записи, имеющие одинаковый адрес электронной почты и дату рождения.
используйте этот код
SELECT *
FROM paypal_ipn_orders
GROUP BY payer_email
HAVING COUNT( payer_email) >1
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)
Это работает быстрее всего для меня
SELECT
primary_key
FROM
table_name
WHERE
primary_key NOT IN (
SELECT
primary_key
FROM
table_name
GROUP BY
column_name
HAVING
COUNT(*) = 1
);
Я думаю, что этот путь проще. На выход выводится идентификатор и почтовый адрес плательщика, где электронная почта плательщика находится в более чем одной записи в этой таблице. Результаты сортируются по id.
SELECT id, payer_email
FROM paypal_ipn_orders
WHERE COUNT( payer_email )>1
SORT BY id;
Как и этот ответ, хотя вместо этого я использовал временную таблицу:
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;
SELECT * FROM 'table' t1 join 'table' t2 WHERE (t1.name=t2.name) && (t1.id!=t2.id)
Попробуйте этот запрос:
SELECT id, COUNT( payer_email ) `tot`
FROM paypal_ipn_orders
GROUP BY id
HAVING `tot` >1
Помогает ли это?