2014-04-19 4 views
0
CREATE TABLE IF NOT EXISTS `master` (
    `id` int(10) unsigned NOT NULL AUTO_INCREMENT, 
    `comments` varchar(50) DEFAULT NULL, 
    PRIMARY KEY (`id`) 
) AUTO_INCREMENT=1 ; 

CREATE TABLE IF NOT EXISTS `detail` (
    `id` int(10) unsigned NOT NULL AUTO_INCREMENT, 
    `master_id` int(10) unsigned NOT NULL, 
    `value` int(10) DEFAULT 0, 
    PRIMARY KEY (`id`) 
) AUTO_INCREMENT=1 ; 

마스터나는 마스터 - 세부 테이블을 가지고 있고 나는 그들에게

id, comments 
1, 'text 1' 

세부

id, master_id, value 
1, 1,   50 
2, 1,   53 

을 복사 할 하나 또는 두 사람과 함께 다음과 같이 내가 그들을 복제 할 검색어 :

id, comments 
1, 'text 1' 
2, 'text 1' * 

id, master_id, value 
1, 1,   50 
2, 1,   53 
3, 2,   50 * 
4, 2,   53 * 

임시 테이블을 사용하여 마스터 만 복사 할 수는 있지만 문제는 세부 사항과 관련되어 있습니다. 우리는 이미 행 2

를 삽입 할 때 그것은 master.id = 1 master_id 행을 복제 한하지 2

id, comments 
1, 'text 1' 
2, 'text 2' 
3, 'text 1' * 

id, master_id, value 
1, 1,   50 
2, 1,   53 
3, 2,   51 
4, 2,   66 
5, 2,   44 
6, 3,   50 * 
7, 3,   53 * 

로 복사됩니다 다음과 같이

2 쿼리 고정 :

INSERT INTO detail (master_id, value) 
SELECT m2.id, value 
FROM detail AS d 
JOIN master AS m1 ON m1.id = d.master_id AND m1.id = @DUPLICATETHISID 
JOIN master AS m2 ON m2.comments = m1.comments AND m2.id != m1.id 
AND m2.id not IN (SELECT master_id FROM detail JOIN master as m ON master_id = m.id) 

답변

0

당신은하지 않습니다 마스터를 복사하려면 임시 테이블이 필요합니다 :

INSERT INTO master (comments) 
SELECT comments FROM master; 

세부 정보를 복사하려면이 sh 잘,

INSERT INTO detail (master_id, value) 
SELECT m2.id, value 
FROM detail AS d 
JOIN master AS m1 ON m1.id = d.master_id 
JOIN master AS m2 ON m2.comments = m1.comments AND m2.id != m1.id 

DEMO

+0

처음,하지만 그것은 여러 번 그것을 할 경우 어떻게해야 무엇 너무 많은 행, 감사 – konenas

+0

을 추가 : 울드 그것을 할? – Barmar

+0

은 세부 정보의 다른 모든 행을 복제합니다. JOIN master AS m1 ON m1.id = d.master_id AND m1.id = 16 JOIN 마스터 AS m2 ON m2.comments = m1.comments 및 m2.id! = m1.id AND m2.id > 16 ##하지만 행 7을 복제 할 수없는 경우 – konenas

관련 문제