반응형
MySQL에서 중복 레코드만 선택하여 표시
이 질문은 매우 간단합니다. 어떤 이유로 인해 중복 레코드만 표시할 수 있는 적절한 결과를 얻을 수 없습니다.
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
샘플 출력
id tot
1 2
4 2
예상 생산량
id payer_email
1 susan@gmail.com
3 susan@gmail.com
4 steve@gmail.com
5 steve@gmail.com
어떻게 하면 이런 일이 생길 수 있을까요?
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
)
그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
다음은 간단한 예입니다.
select <duplicate_column_name> from <table_name> group by <duplicate_column_name> having count(*)>=2
분명히 효과가 있을 겁니다.:)
테이블에서 모든 중복 행 목록 가져오기:
Select * from TABLE1 where PRIMARY_KEY_COLUMN NOT IN ( SELECT PRIMARY_KEY_COLUMN
FROM TABLE1
GROUP BY DUP_COLUMN_NAME having (count(*) >= 1))
두 행 데이터에 대해 동일하지 않거나 동일할 수 있는 열 값을 하나 이상 선택하려는 경우 위의 답변이 작동하지 않습니다.
예를 들어, 사용자 이름과 생년월일을 선택하고 싶습니다.그러나 데이터베이스에서 사용자 이름이 중복되지 않지만 생일이 중복되면 이 솔루션이 작동하지 않습니다.
이 솔루션을 사용하려면 동일한 테이블에 직접 참여해야 합니다.
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
위 쿼리는 동일한 email_id 및 동일한 생년월일을 가진 모든 레코드를 반환합니다.
이것이 저에게 가장 빨리 작동합니다.
SELECT
primary_key
FROM
table_name
WHERE
primary_key NOT IN (
SELECT
primary_key
FROM
table_name
GROUP BY
column_name
HAVING
COUNT(*) = 1
);
이 코드를 사용합니다.
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)
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)
저는 이 방법이 더 간단하다고 생각합니다.출력에는 지불인의 전자 메일이 이 테이블의 두 개 이상의 레코드에 있는 ID와 지불인의 전자 메일이 표시됩니다.결과는 ID별로 정렬됩니다.
SELECT id, payer_email
FROM paypal_ipn_orders
WHERE COUNT( payer_email )>1
SORT BY id;
다음 쿼리를 시도해 보십시오.
SELECT id, COUNT( payer_email ) `tot`
FROM paypal_ipn_orders
GROUP BY id
HAVING `tot` >1
도움이 되나요?
언급URL : https://stackoverflow.com/questions/11694761/select-and-display-only-duplicate-records-in-mysql
반응형
'programing' 카테고리의 다른 글
Android Studio에서 서명된 APK를 생성하는 동안 서명 버전 - V1(Jar Signature)과 V2(Full APK Signature)의 차이점은 무엇입니까? (0) | 2023.09.03 |
---|---|
하나의 열을 여러 개의 외부 키로 참조할 수 있습니까? (0) | 2023.09.03 |
SSL 연결은 mysql 클라이언트에서는 작동하지만 Perl DBI에서는 작동하지 않습니다.마리아DB (0) | 2023.09.03 |
문자열에 제로 패딩 추가 (0) | 2023.09.03 |
Git: 분기된 로컬 분기의 모든 변경 내용 삭제 (0) | 2023.09.03 |