[英]Join parent to child node in hierarchical table structure
我有以下用於捕獲樹節點的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以便能夠選擇兩列?
我已經查看了很多有關嘗試左聯接的資源,但無濟於事。 由於需要在子查詢中使用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;
在邏輯上似乎是正確的。 抱歉,無法測試。 在這種情況下,如果您確實經常使用此功能,則應重構並設計具有更好定義的父子鏈接的表
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.