mysql - 如何获取mysql表的所有行父项

标签 mysql stored-procedures

我正在尝试创建一个存储过程,返回给定 id 的父级的所有 id。这是我到目前为止所得到的内容,出于所有意图和目的,该表由两列组成:id 和 ParentID。当前代码的结果是,它似乎没有从表中获取ParentID,它只是尝试将传入的id两次添加到临时表中,然后失败。我哪里出错了?

CREATE PROCEDURE `mydb`.`Test` (IN id int)
BEGIN
DECLARE parentId INT;
DECLARE n INT;

  DROP TEMPORARY TABLE IF EXISTS _1067_parents;

 CREATE TEMPORARY TABLE _1067_parents (
node_id INT NOT NULL PRIMARY KEY
  );
set n = 0;
set parentId := id;

get_parents_loop: LOOP
     set parentId := (select ParentID from mydb.myTable where TDOID = parentId);

    IF parentId is NULL THEN
      LEAVE get_parents_loop;
    END IF;

    INSERT INTO _1067_parents(node_id) Values (parentId);

END LOOP get_parents_loop;

 SELECT *
    FROM _1067_parents;

end

最佳答案

SQL Fiddle

MySQL 5.5.30 架构设置:

create table `MyTable`(`id` int primary key, `parentid` int)
//

insert `MyTable` (`id`, `parentid`) values
  (1, null), (2, 1), (3, 2)
//

CREATE PROCEDURE `Test` (IN cid int)
BEGIN
DECLARE parId INT;
DECLARE curId INT;

  DROP TEMPORARY TABLE IF EXISTS _1067_parents;

 CREATE TEMPORARY TABLE _1067_parents (
node_id INT NOT NULL PRIMARY KEY
  );

set curId := cid;
get_parents_loop: LOOP
    set parId := null;

    set parId = (select parentid from MyTable where id = curId);

    IF parId is NULL THEN
      LEAVE get_parents_loop;
    END IF;

    INSERT INTO _1067_parents(node_id) Values (parId);
    set curId := parId;

END LOOP get_parents_loop;


 SELECT *
    FROM _1067_parents;

end
//

show create procedure test;

查询 1:

call test(3)

<强> Results :

| NODE_ID |
-----------
|       1 |
|       2 |

关于mysql - 如何获取mysql表的所有行父项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15578720/

相关文章:

mysql - 显示客户每天的支出以及他们前一天是否消费过 (SQL)

mysql - 如何在一个sql触发器中使用多个事件?

php - 向 PDO/MySql 语句添加辅助 WHERE 语句

mysql - 存储过程参数类型

sql-server - 对行进行分组以尽量减少偏差

mysql - LEFT JOIN 返回与 INNER JOIN 相同的结果

MySQL:LIKE 中的 ss 和 ß

c# - 在edmx文件中手动添加存储过程

c# - 将带有 FlagsAttribute 的枚举解析为 SqlParameter

sql - 将列名传递给函数