ฉันกำลังทำการนำเข้าข้อมูล ฉันมีแผนผังที่เป็นรูปธรรมซึ่งฉันต้องการสร้างหมายเลขประจำตัวใหม่ ฉันวางแผนที่จะนำเข้าข้อมูลจากตารางเก่าไปยังตารางใหม่ จากนั้นจึงอัปเดต 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 ใหม่จากคอลัมน์ id