2014-01-30 122 views
0

我有一個表有成千上萬的條目,許多在一個層次結構形式。Hierachy,臨時表插入從

我正在尋找一種方法來將幾個特定家族樹的頭部級別輸入到查詢中,搜索他們所有的孩子,他們的孩子的孩子等,直到沒有行保留,然後將每個ID插入另一個表中12次。

編號(AID, id1, 1) (AID , id1, 2)...(AID, id1, 11)(AID, id1, 12)

我一直想這個查詢放在一起作爲一個測試,以幫助找到所需的ID的,與最終目標是能夠找到每個後裔和各插入另一臺X12倍。但收效甚微。有任何想法嗎?

....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;