2014-11-06 2 views
0

여기에 몇 가지 솔루션을 게시했지만 어느 누구도 내 문제를 해결하지 못했습니다.Sql이 여러 원시 데이터의 이름을 바꿉니다.

고유 한 사용자 이름을 수신하도록 사용자 이름 열을 설정하고 싶습니다.

그러나 특정 상황에서 1000 개의 중복 된 사용자 이름이 이미 등록되어 있어야합니다.

나는이 솔루션을 시도 :

UPDATE profile n 
JOIN (SELECT username, MIN(profile_id) min_id FROM profile 
     GROUP BY username HAVING COUNT(*) > 1) d 
ON n.username = d.username AND n.profile_id <> d.min_id SET n.username = CONCAT(n.username, '1'); 

을하지만 등등 ... 최대 1000 tony1111111111111 사용자 이름을 위해 예를 들어 토니, tony1, tony11, tony111에 대해 동일한 사용자 이름을 나에게주고 긴 긴 길이가 있습니다.

저는 사용자 이름 단어 뒤에 4 자리 숫자 만 얻는 해결책을 원합니다. 0001000200030004 .... 1000

누군가 나를 도와 줄 수 있습니까? 나는 순간에 가지고 올 수

UPDATE profile n JOIN (
    SELECT profile_id, username, (@row_number:[email protected]_number+1) as cntr 
    FROM profile, (SELECT @row_number:=0) AS t 
    WHERE username IN (SELECT username 
       FROM profile 
       GROUP BY username HAVING COUNT(*) > 1) 
      and (username, profile_id) not in (SELECT username, MIN(profile_id) 
       FROM profile 
       GROUP BY username HAVING COUNT(*) > 1) 
    ) d ON n.profile_id = d.profile_id 
SET n.username = CONCAT(n.username, d.cntr); 

이 최고입니다 .... 문제는 그 사이에 카운터를 공유 할 것입니다 :

답변

1

방법 같은 것에 대해

은 사전에 감사합니다 모든 사용자 이름 ... 당신은 Alejandro, Alejandro1, Pedro, Pedro2, Juan, Juan3 .....

+0

안녕하세요. 고마워,하지만 오류가 발생합니다 : # 1064 - SQL 구문에 오류가 있습니다; 올바른 구문이 ': = @ row_number + 1'근처에서 사용하도록 MySQL 서버 버전에 해당하는 매뉴얼을 확인하십시오. AS 번호4 번째 줄에 사용자 이름이있는 사용자 GROUP BY GROUP (*) '에서 –

+0

쿼리를 편집했습니다. 스키마 및 일부 샘플 데이터를 추가하면 SQL fiddle을 사용하여 쿼리를 실행할 수 있습니다. – Argod

+0

오류가 수정되었지만 다음 오류가 발생했습니다. # 1248 - 모든 파생 테이블에 고유 한 별칭이 있어야합니다. –

0

나는 당신이 잘못했다고 생각합니다. (*)> 1) AS t2 (사용자 이름, min_id, @ row_number + 1을 cntr로 선택하십시오. , (SELECT @row_number : = 0) AS t) d ON n.username = d.username

+0

초기 응답을 수정했습니다 ... – Argod

+0

내 친구 .... .... 괜찮습니다. 매우 고마워요. –

+0

멋진 !! 나는 내가 도울 수있어서 기뻐요!, 당신은 그 때 응답으로 나의 포스트를 표시 할 수 있 었는가? thnx – Argod

관련 문제