mysql - 层次结构、临时表插入自

标签 mysql hierarchical-data temp-tables

我有一张包含数千个条目的表,其中许多条目采用层次结构形式。

我正在寻找一种方法,将几个特定家谱的头级输入到查询中,搜索他们的所有 child 、他们 child 的 child 等,直到没有行剩余,然后将每个 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'”,这似乎使整个过程无效!

最佳答案

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;

关于mysql - 层次结构、临时表插入自,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21456899/

相关文章:

mysql - mysql 过程中的last_insert_id() 返回0

php - php 和 mysql 中的组存档

sql-server - 如何在sql server中为分层数据生成序列号

mysql - MySQL如何将所有NEW/OLD触发器数据放入临时表并在程序中使用?

sql - 临时表如何在存储过程中工作(全局和本地)

MySQL。混合查询并仅显示结果一次

c# - 来自 DB 的分层数据 - 加入或不加入

sql-server - T-SQL COALESCE GROUPING 将 SETS 组合成没有 NULL 重复项的单列

mysql - 如何使用现有表及其在 MySQL 中的记录创建临时表?

php - MySQL 中的 Google map 路线