2017-12-14 5 views
0

MySQL 데이터베이스에서 중복 된 각 행을 찾으려고합니다.중복 된 연결 값 찾기

1 alex smith 
2 bob  smith 
3 alex smith 

나는 돌아가려면 :이 코드는 중복을 찾을 수

1 alex smith 
3 alex smith 

하지만 중복 각 행을 나열하지 않습니다.

SELECT 
    *, 
    CONCAT(`firstName`, ' ', `lastName`) as full_name, 
    COUNT(*) d 
FROM users 
GROUP BY full_name 
HAVING d > 1; 

아래 코드는 제가 dupliate 각 행을 얻기 위해 노력하고있어,하지만 난 오류 얻을 "# 1054 - 알 수없는 열 'FULL_NAME'를 'IN/ALL/ANY 서브 쿼리'에서"

SELECT CONCAT(`firstName`, ' ', `lastName`) as full_name 
FROM users 
WHERE full_name IN (
    SELECT CONCAT(`firstName`, ' ', `lastName`) as full_name 
    FROM users 
    GROUP BY full_name 
    HAVING COUNT(full_name) > 1 
) 
+1

왜 간단하지 :'where firstName = 'x'and lastName = 'y''? – Ali

+0

@Ali OP는 다른 모든 중복을 찾고 싶어합니다. – isaace

+0

알았어. 질문을 잘못 이해했다. – Ali

답변

2

WHERE 절에 별칭을 사용할 수 없습니다. 실제로 CONCAT 이 필요하지 않습니다 (이 경우 계산 비용이 증가합니다); 대신 "튜플"을 비교할 수 있습니다.

SELECT * 
FROM users 
WHERE (`firstName`, `lastName`) IN (
    SELECT `firstName`, `lastName` 
    FROM users 
    GROUP BY `firstName`, `lastName` 
    HAVING COUNT(*) > 1 
);