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 中的重复项

php - 未定义索引 PHP/mySQL

MySQL复制: Prevent a specific procedure call on slave

c# - MySQL 存储过程、c# 和 inout 参数

sql - 如何从存储过程返回所有值?

sql - SQL Server 表中存在多个标识列

php - 帮助创建正确的 CASE 语句

php - MYSQL 选择;我无法弄清楚如何根据不同的列值排除行

MySQL - 避免重复结果行(使用 SUM)

sql-server-2008 - SQL Server 2008 中可用的数据结构