2014-01-30 2 views
0

수천 개의 항목이있는 하나의 테이블이 있으며 많은 테이블이 하나의 계층 구조 형식입니다.Hierachy, 임시 테이블 Insert from

몇 가지 특정 패밀리 트리의 머리 레벨을 쿼리에 입력하고, 행이 남아 있지 않을 때까지 모든 하위 항목, 하위 항목 등을 검색 한 다음 각 ID를 다른 테이블에 12 번 삽입하는 방법을 찾고 있습니다. .

내가 각각의 후손을 찾아 다른 테이블의 X12 시간에 각을 삽입 할 수 있도록 최종 목표로, 필요한 아이디의를 찾을 수 있도록 테스트로서 함께이 쿼리를 넣어 시도하고있다

(AID, id1, 1) (AID , id1, 2)...(AID, id1, 11)(AID, id1, 12) 번호가. 그러나 거의 성공하지 못했습니다. 어떤 아이디어?

....for the right syntax to use near ''parent_id' FROM test AS t JOIN acc2 as r on t.parent_id = r.id; ' at line 25 

내 현재의 에러 메시지

(절대 아마추어)이 후

DROP PROCEDURE IF EXISTS find_descendants() 
DELIMITER GO 
CREATE PROCEDURE find_descendants() 
BEGIN 

DROP TABLE IF EXISTS acc; 

CREATE TEMPORARY TABLE acc 

SELECT id, parent_id, 0 as level 
FROM test 

WHERE id = 2; 

ALTER TABLE acc ADD primary key (id,parent_id); 

REPEAT 

DROP TABLE IF EXISTS acc2; 

CREATE temporary table acc2 

SELECT * FROM acc; 

INSERT INTO acc2 

SELECT t.id, r.'parent_id' 

FROM test AS t 

JOIN acc2 AS r ON t.parent_id = r.id; 

UNTIL Row_count() = 0 END REPEAT; 

END; 

go 

DELIMITER; 
CALL find_descendants(); 

SELECT * FROM acc; 

, 나는 오류 번호를 얻을 수 1137 무효로 보인다 "테이블 'ACC2'을 다시 열 수 없습니다" 전체 과정!

답변

0

당신은 INSERT 쿼리 구문 오류가

INSERT INTO acc2 
SELECT t.id, r.'parent_id' /*--COMMENT : remove '' from 'parent_id' , it should be r.parent_id */ 
FROM test AS t 
JOIN acc2 AS r ON t.parent_id = r.id;