gpt4 book ai didi

mysql - 在分层表结构中将父节点连接到子节点

转载 作者:行者123 更新时间:2023-11-29 18:25:49 27 4
gpt4 key购买 nike

我有以下 SQL 来获取树节点及其父节点:

SELECT 
c.id
, c.tag
, (
SELECT
s.id
FROM treeTable s
WHERE s.lft < c.lft AND s.rgt > c.rgt
ORDER BY s.rgt - c.rgt ASC
LIMIT 1
) AS parent
FROM treeTable c;

问题是我还希望表内有 s.tag ,但我无法从子查询中选择两列。我怎样才能重构这个 SQL 以便能够选择两列?

我已经查看了很多有关尝试 LEFT JOIN 的资源,但没有任何效果。由于需要在子查询中使用 ORDER BY 和 LIMIT,我无法想到简单的分组操作

编辑:表的结构如下所示:

Field     Type              Collation          Null    Key     Default  Extra           Privileges                       Comment  
-------- ---------------- ----------------- ------ ------ ------- -------------- ------------------------------- ---------
id int(10) (NULL) NO PRI (NULL) auto_increment select,insert,update,references
tag varchar(255) latin1_swedish_ci NO (NULL) select,insert,update,references
lft int(11) (NULL) NO MUL (NULL) select,insert,update,references
rgt int(11) (NULL) NO MUL (NULL) select,insert,update,references

最佳答案

尝试一下,使用两个低效的子选择

SELECT 
c.id,
c.tag,
(
SELECT
s.id
FROM treeTable s
WHERE s.lft < c.lft AND s.rgt > c.rgt
ORDER BY s.rgt - c.rgt ASC
LIMIT 1
) AS parent,
(
SELECT
s.tag
FROM treeTable s
WHERE s.lft < c.lft AND s.rgt > c.rgt
ORDER BY s.rgt - c.rgt ASC
LIMIT 1
) AS parent_tag
FROM treeTable c;

逻辑上看来是正确的。无法测试抱歉。在这种情况下,如果您确实经常使用此功能,则应该重构并设计一个具有更好定义的父子链接的表

关于mysql - 在分层表结构中将父节点连接到子节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46207119/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com