Mysql 我需要一个子节点的所有父节点的列表 我的SQL数据 我尝试过的SQL查询 我得到的结果是: 结果应该是。

Mysql 我需要一个子节点的所有父节点的列表 我的SQL数据 我尝试过的SQL查询 我得到的结果是: 结果应该是。,mysql,Mysql,考虑以下几点: 邻接列表模型: DROP TABLE IF EXISTS my_table; CREATE TABLE my_table (member_id INT NOT NULL PRIMARY KEY ,parent INT NULL ); INSERT INTO my_table VALUES (234,NULL), (182,234), (935,182), (330,234), (743,182), (382,743), (169,935), (435,935), (809,3

考虑以下几点:

邻接列表模型:

DROP TABLE IF EXISTS my_table;

CREATE TABLE my_table
(member_id INT NOT NULL PRIMARY KEY
,parent INT NULL
);

INSERT INTO my_table VALUES
(234,NULL),
(182,234),
(935,182),
(330,234),
(743,182),
(382,743),
(169,935),
(435,935),
(809,330),
(477,330),
(196,743),
(917,382);


SELECT y.member_id parent
     , z.member_id granparent 
  FROM my_table x 
  LEFT 
  JOIN my_table y 
    ON y.member_id = x.parent 
  LEFT 
  JOIN my_table z 
    ON z.member_id = y.parent 
 WHERE x.member_id = 743;
+--------+-------------+
| parent | grandparent |
+--------+-------------+
|    182 |         234 |
+--------+-------------+
…或嵌套集模型:

DROP TABLE IF EXISTS my_nested_set;

CREATE TABLE my_nested_set
(member_id INT NOT NULL PRIMARY KEY
, lft INT NOT NULL
, rgt INT NOT NULL
);

INSERT INTO my_nested_set VALUES
(234      ,   1, 24),
(182      ,   2, 17),
(935      ,   3,  8),
(435      ,   4,  5),
(169      ,   6,  7),
(743      ,   9, 16),
(382      ,  10, 13),
(917      ,  11, 12),
(196      ,  14, 15),
(330      ,  18, 23),
(809      ,  19, 20),
(477      ,  21, 22);

SELECT x.member_id 
  FROM my_nested_set x 
  JOIN my_nested_set y 
    ON y.lft > x.lft 
   AND y.lft < x.rgt 
 WHERE y.member_id = 743;
+-----------+
| member_id |
+-----------+
|       182 |
|       234 |
+-----------+
如果存在my_嵌套_集合,则删除表格;
创建表格我的嵌套集合
(成员id INT不为空主键
,lft INT不为空
,rgt INT不为空
);
插入到我的\u嵌套\u集合值中
(234      ,   1, 24),
(182      ,   2, 17),
(935      ,   3,  8),
(435      ,   4,  5),
(169      ,   6,  7),
(743      ,   9, 16),
(382      ,  10, 13),
(917      ,  11, 12),
(196      ,  14, 15),
(330      ,  18, 23),
(809      ,  19, 20),
(477      ,  21, 22);
选择x.member\u id
从我的嵌套集合x
加入我的嵌套集合y
关于y.lft>x.lft
和y.lft
我有一种感觉,“黑客”只有递归查询才能正确处理整数(数字)…注意,DISTINCT不是一个函数当考虑分层数据时,我们倾向于认为父母有很多孩子,另一方面,你似乎理解错了,因为它在子查询库中缺少一个ORDER BY,伙计们,我创建了一个存储过程来查找结果,因为我将结果存储在另一个表中,或者加速我的web应用程序,但我从未用java代码调用过一个过程。你能指引我吗??过程名称为“列表父节点('M3PL611743')”
+-------------+
| refrence_id |
+-------------+
| M3PL1234    |
| M3PL368182  |
| M3PL611743  |
| M3PL532935  |
| M3PL846330  |
| M3PL157382  |
| M3PL590169  |
| M3PL687435  |
+-------------+
M3PL1234
M3PL368182
DROP TABLE IF EXISTS my_table;

CREATE TABLE my_table
(member_id INT NOT NULL PRIMARY KEY
,parent INT NULL
);

INSERT INTO my_table VALUES
(234,NULL),
(182,234),
(935,182),
(330,234),
(743,182),
(382,743),
(169,935),
(435,935),
(809,330),
(477,330),
(196,743),
(917,382);


SELECT y.member_id parent
     , z.member_id granparent 
  FROM my_table x 
  LEFT 
  JOIN my_table y 
    ON y.member_id = x.parent 
  LEFT 
  JOIN my_table z 
    ON z.member_id = y.parent 
 WHERE x.member_id = 743;
+--------+-------------+
| parent | grandparent |
+--------+-------------+
|    182 |         234 |
+--------+-------------+
DROP TABLE IF EXISTS my_nested_set;

CREATE TABLE my_nested_set
(member_id INT NOT NULL PRIMARY KEY
, lft INT NOT NULL
, rgt INT NOT NULL
);

INSERT INTO my_nested_set VALUES
(234      ,   1, 24),
(182      ,   2, 17),
(935      ,   3,  8),
(435      ,   4,  5),
(169      ,   6,  7),
(743      ,   9, 16),
(382      ,  10, 13),
(917      ,  11, 12),
(196      ,  14, 15),
(330      ,  18, 23),
(809      ,  19, 20),
(477      ,  21, 22);

SELECT x.member_id 
  FROM my_nested_set x 
  JOIN my_nested_set y 
    ON y.lft > x.lft 
   AND y.lft < x.rgt 
 WHERE y.member_id = 743;
+-----------+
| member_id |
+-----------+
|       182 |
|       234 |
+-----------+