2013-07-16 3 views
3

는 내가 같은 사용자 테이블에서 채울 필요가 USERS 테이블에, supervisor_id을 새 열을 추가 MySQL의 업데이트 열은

ID | USERNAME | SUPERVISOR_USERNAME | SUPERVISOR_ID 

1 | jdoe  | jsmith    | 2 

2 | jsmith | dduck    | NULL 

내가 다음을 시도했지만 그것은 분명 사용자 만의 supervisor_username 자신의 이름이었다 supervisor_id을 설정 :이처럼 supervisor_id = ID를 설정합니다.

update users 
set supervisor_id = id 
where supervisor_username = username 
+0

테이블의 크기는 어느 정도입니까? 수동으로 해보시겠습니까? – KyleK

+0

테이블 크기가 크지 않다면 사용자 임시 복사본을 만든 다음 사용자 및 copy_of_users를 기반으로 새 테이블을 만들고 'CREATE TABLE USERS_IDS (ID int, USERNAME VARCHAR (xxxx), SUPERVISOR_ID int) ; ' – dougEfresh

+0

@ Pakk, 관리자가 사용자 이름으로 이름을 가진 경우에만 쿼리가 작동한다고 생각합니다. – dougEfresh

답변

9

당신은 여러 테이블 UPDATE 구문을 자체 조인 할 수 있습니다 :

UPDATE users u 
    JOIN users s ON s.SUPERVISOR_USERNAME = u.USERNAME 
SET u.SUPERVISOR_ID = s.ID 

sqlfiddle에를 참조하십시오.

3NF을 위반하는 SUPERVISOR_NAME 열을 삭제해야합니다. 대신에, 당신은 당신이 데이터를 검색 할 때 원하는 경우 다른 자체 조인 할 수 있습니다 :

SELECT u.ID, u.USERNAME, s.USERNAME AS SUPERVISOR_USERNAME, u.SUPERVISOR_ID 
FROM users u LEFT JOIN users s ON s.ID = u.SUPERVISOR_ID 

sqlfiddle에를 참조하십시오.

+0

예, ID가 있으므로 이제 supervisor_username을 삭제합니다. 고마워, 이거 할거야. –

+0

댕이 날 괴롭히다 gj – Pakk

+1

@Pakk : 10 분 ..? – eggyal

1
update Users u 
inner join Users temp on 
    u.Supervisor_username = temp.UserName 
set u.Supervisor_ID = temp.ID