Обновление MYSQL с вложенным подзапросом
У меня есть 3 таблицы в этом формате:
Стол Детский:
id|parent_id|grandparent_id
1 1 null
2 2 null
3 3 null
Родитель таблицы:
id|grandparent_id
1 1
2 1
3 2
Стол GrandParent:
id
1
2
Мне нужно выполнить запрос, который обновляет столбец grandparent_id в дочерней таблице на основе grandparent_id в родительской таблице. Таким образом, правильная окончательная форма таблицы Child будет следующей: Table Child:
id|parent_id|grandparent_id
1 1 1
2 2 1
3 3 2
Это запрос, который у меня есть на данный момент, но он возвращает более 1 строки, что неверно:
update child set grandparent_id = (
select gpd.id from GrandParent gp, Parent p
where p.grandparent_id = gp.id)
where 1
2 ответа
Решение
Вы можете использовать следующий запрос, чтобы получить UPDATE
:
UPDATE Child SET Child.grandparent_id = (
SELECT GrandParent.id
FROM GrandParent INNER JOIN Parent ON GrandParent.id = Parent.grandparent_id
WHERE Parent.id = parent_id
) WHERE Child.grandparent_id IS NULL;
Демонстрация: http://sqlfiddle.com/ (изменено содержимое таблицы для отображения
UPDATE
работает).Подсказка: ваш "правильный" пример неверен:
GrandParent
изParent
сid = 2
является1
!
Пожалуйста, попробуйте следующий запрос:
Update child c,parent p
set c.grandparent_id = p.grandparent_id
where c.id = parent.id
and c.grandparent_id = ' '