2012-05-03 3 views
0

테이블에있는 모든 중복 전자 메일 주소를 반환하는 다음 Mysql select가 있습니다.중복 레코드 인 경우 레코드 필드 업데이트

SELECT users.FirstName, `Surname`, users.email1 
FROM users 
INNER JOIN ( 
    SELECT email1 
    FROM users 
GROUP BY email1 
HAVING count(email1) > 1) dup ON users.email1 = dup.email1 
ORDER BY users.email1 

이 좋은 작품, 제가 지금하고자하는 것은 업데이트가 "YES"로 users.DupEmail라는 필드입니다 그러나 나는이 작업을 수행하는 방법을 확실입니다. 나는 select를 대체하기 위해 업데이트 라인을 넣으려고 시도했지만, 여기에 다시 도움을 청하기 때문에 분명히 잘못되었다.

아무도 도와 줄 수 있습니까?

답변

2

당신은 단지와 함께 여러 테이블 UPDATE 구문을 사용할 수있는 자체 조인 :

UPDATE users AS u1 
    JOIN users AS u2 USING (email1) 
    SET u1.DupEmail = 'YES' 
WHERE NOT u1.id = u2.id; -- use your primary key here 
+0

예를 들어 답장을 보내 주셔서 감사합니다. 테스트를 마치고 잘 작동합니다. – user965526

0

다음 스크립트가 문제를 해결해야한다 - 안전하고 업데이트를 aplying 전에 결과를 테스트하기 위해 SELECT를 사용 :

-- SELECT FirstName, Surname, email1 
-- FROM users 

UPDATE users 
SET DupEmail = 1 
WHERE u0.email1 IN (
    SELECT u1.email1 
    FROM users u1 
    GROUP BY u1.email1 
    HAVING COUNT(*) > 1 
)