Обновление 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 = ' '
Другие вопросы по тегам