在同一个表上使用JOIN的SQL Update行

时间:2014-01-29 23:05:50

标签: mysql sql tree sql-update

我正在导入数据。我有一个物化树,我想重建ID号码。 我计划将数据从旧表导入到新表,然后根据新创建的ID更新新表中所有行的parent_id。

新表格结构:

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的列,我想在更新中使用它。导入的数据类似于附加的屏幕。

materialized tree browse view

现在我想用这个查询重建父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列中的新ID替换id_parent值。

1 个答案:

答案 0 :(得分:0)

你能看到下面的sql结果,你的update语句用它来识别要更新的记录...... 这会返回任何结果吗?

select * from category k INNER JOIN category k2 ON k.old_node_id = k2.id_parent

这将有助于查找应由update子句更新的行。