Строка обновления SQL с JOIN в той же таблице

Я делаю импорт данных. У меня есть материализованное дерево, в котором я хочу восстановить идентификационные номера. Я планирую импортировать данные из старой таблицы в новую, а затем обновить parent_id всех строк в новой таблице на основе вновь созданных IDS.

Новая структура таблицы:

CREATE TABLE IF NOT EXISTS `category` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `category_name` varchar(255) NOT NULL,
  `category_key` varchar(255) NOT NULL,
  `ip` varchar(255) NOT NULL,
  `id_parent` int(10) unsigned NOT NULL,
  `depth` int(10) unsigned NOT NULL,
  `old_node_Id` int(10) unsigned NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

Как видите, в новой таблице я добавил дополнительный столбец с именем old_node_id, который я хочу использовать при обновлении. Импортированные данные выглядят так, как показано на прикрепленном экране.

представление просмотра материализованного дерева

Теперь я хочу перестроить родительские идентификаторы с помощью этого запроса.

UPDATE category k INNER JOIN category k2 ON k.old_node_id = k2.id_parent SET k.id_parent = k2.id 

Но строки не затронуты. Возможно ли это сделать? У меня есть образцы данных:

INSERT INTO `category` (`id`, `category_name`, `category_key`, `ip`, `id_parent`, `depth`, `old_node_Id`) VALUES
(1, 'Test 1', '031', '025_026_027_031', 1382, 4, 1382),
(2, 'Test 2', '032', '025_026_027_032', 1382, 4, 1178),
(3, 'Test 3', '034', '025_026_027_034', 1382, 4, 1179);

Это строки из новой таблицы. Все, что мне нужно, это заменить значения id_parent новыми идентификаторами из столбца id.


person webrama.pl    schedule 29.01.2014    source источник
comment
в вашем примере нет совпадающих строк.   -  person echo_Me    schedule 30.01.2014
comment
Это просто пример. У меня есть больше строк, в которых совпадают od_node_id и id_parent.   -  person webrama.pl    schedule 30.01.2014
comment
пожалуйста, предоставьте пример скрипки или дайте некоторые примеры данных.   -  person echo_Me    schedule 30.01.2014
comment
Пример данных здесь.   -  person webrama.pl    schedule 30.01.2014
comment
я не знаю, ваш запрос не работает, но похоже, что он работает здесь или может вы хотите что-то другое?   -  person echo_Me    schedule 31.01.2014
comment
Это именно то, что я хочу, но для всех строк.   -  person webrama.pl    schedule 31.01.2014
comment
здесь для всех строк. sqlfiddle.com/#!2/06676/1   -  person echo_Me    schedule 31.01.2014
comment
Это тот же запрос, который вы дали мне раньше.   -  person webrama.pl    schedule 31.01.2014
comment
да, но я добавил одну строку и хочу, чтобы вы посмотрели на результаты   -  person echo_Me    schedule 31.01.2014
comment
Хорошо работает. Я не знаю, что я сделал не так в начале... Спасибо.   -  person webrama.pl    schedule 31.01.2014
comment
приветствую тебя чувак. если что-то не так, просто отладьте его и посмотрите, где вы ошиблись   -  person echo_Me    schedule 31.01.2014


Ответы (1)


можете ли вы увидеть результаты sql ниже, который используется в вашем операторе обновления для идентификации записей, которые нужно обновить... возвращает ли это какие-либо результаты?

выберите * из категории k ВНУТРЕННЕЕ СОЕДИНЕНИЕ категории k2 ON k.old_node_id = k2.id_parent

это поможет найти строки, которые должны быть обновлены с помощью предложения обновления.

person garpitmzn    schedule 29.01.2014
comment
Да. У меня есть 35 результатов по вашему запросу. Итак, есть идеи, как обновить так, как мне нужно? - person webrama.pl; 30.01.2014