แถวอัพเดต 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 ใหม่จากคอลัมน์ 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 INNER JOIN หมวดหมู่ k2 ON k.old_node_id = k2.id_parent

ซึ่งจะช่วยในการค้นหาแถวที่ควรอัปเดตตามคำสั่งอัปเดต

person garpitmzn    schedule 29.01.2014
comment
ใช่. ฉันมีผลลัพธ์ 35 รายการพร้อมข้อความค้นหาของคุณ มีแนวคิดใดบ้างที่จะอัปเดตในแบบที่ฉันต้องการ - person webrama.pl; 30.01.2014