MySQL заменяет родительское имя на родительский идентификатор - PullRequest
1 голос
/ 24 июня 2011

У меня есть таблица (t), как эта

t.Name  t.Parent  t.Id
John    Bob       1
Frank   Bob       2
Alice   Frank     3
Tim     John      4
Lucy    Bob       5
Tim     Frank     6
...

Теперь я хочу заменить строку t.Parent на Id родительского.Есть ли способ сделать это в MySQL или это лучший способ сделать небольшой скрипт?

Редактировать: Спасибо всем

Ответы [ 3 ]

4 голосов
/ 24 июня 2011

Соедините таблицу с самим собой, используя родительское имя, а затем выполните обмен:

UPDATE table t1 LEFT JOIN table t2 ON t2.Name = t1.Parent
SET t1.Parent = t2.Id

ОБНОВЛЕНИЕ: Я вижу, мне удалось написать почти то же утверждение, что и niktrs. Хотя я предположил, что вы хотите поменять значения вместо использования нового столбца.

3 голосов
/ 24 июня 2011

Создать столбец ParentId

Затем объединить таблицу с самим собой

UPDATE table t1 JOIN table t2 ON t1.parent = t2.name
SET t1.ParentId = t2.Id
2 голосов
/ 24 июня 2011

@ Brendan имеет самое короткое решение с объединенным обновлением.

Вот другое решение с копированием данных:

CREATE TABLE parents LIKE t;
INSERT INTO parents SELECT * FROM t;
UPDATE t SET parent=(SELECT id FROM parents WHERE name=t.parent ORDER BY id ASC LIMIT 1);

Представление может быть достаточноно MySQL отказывается использовать его таким образом.

После запуска обновления вы можете изменить тип поля parent на тот же, который имеет id:

ALTER TABLE t CHANGE parent parent integer;

ИКонечно, вы можете удалить таблицу копирования:

DROP TABLE parents;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...