2013-07-16 2 views
3

я добавил новую колонку, supervisor_id, к таблице USERS, что мне нужно, чтобы заполнить из таблицы же ПОЛЬЗОВАТЕЛЕЙ:MySQL Update Column из другого столбца в одной таблице

ID | USERNAME | SUPERVISOR_USERNAME | SUPERVISOR_ID 

1 | jdoe  | jsmith    | NULL 

2 | jsmith | dduck    | NULL 

Как бы я Переберите таблицы установить supervisor_id = идентификатор, например:

ID | USERNAME | SUPERVISOR_USERNAME | SUPERVISOR_ID 

1 | jdoe  | jsmith    | 2 

2 | jsmith | dduck    | NULL 

Я попытался следующие, но это, очевидно, только установить supervisor_id где supervisor_username пользователя было его собственное имя пользователя.

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.

Вы должны затем оставить свою колонку SUPERVISOR_NAME, которая нарушает 3NF; вместо этого, вы можете сделать еще автообъединение при извлечении данных, если это необходимо:

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

Да, теперь я теряю имя supervisor_username, когда у меня есть их идентификаторы. Спасибо, я думаю, что это будет сделано. –

+0

dang beat me to it 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 
Смежные вопросы