MySQL中,現(xiàn)有一組數(shù)據(jù),數(shù)據(jù)包含字段主鍵:id,父類ID:pid,id與pid是繼承關(guān)系,根據(jù)某個(gè)id查詢其下級(jí)關(guān)聯(lián)的所有記錄;
1、利用遞歸查詢語(yǔ)法。遞歸查詢是在 MySQL 8.0 版本引入的新特性,如果您的 MySQL 版本低于 8.0,則無(wú)法使用遞歸查詢語(yǔ)法。
WITH RECURSIVE sub_items AS (
SELECT id, pid, name
FROM items
WHERE id = 1
UNION ALL
SELECT i.id, i.pid, i.name
FROM items i
INNER JOIN sub_items si ON si.id = i.pid
)
SELECT * FROM sub_items;
在上面的語(yǔ)句中,使用了 Common Table Expressions (CTE) 和遞歸查詢來(lái)實(shí)現(xiàn)。首先,定義了一個(gè) CTE sub_items,其中包含了 ID 為 1 的記錄。然后,使用 UNION ALL 將這個(gè)記錄和其下級(jí)記錄合并起來(lái),一直遞歸下去,直到找到所有下級(jí)記錄。最后,在最外層使用 SELECT 語(yǔ)句查詢并返回這些記錄。
在實(shí)際使用時(shí),需要將語(yǔ)句中的 items 替換成實(shí)際的表名,將 id、pid、name 替換成實(shí)際的字段名,將 1 替換成要查詢的 ID。
2、MySQL 8.0以下可以使用自連接查詢實(shí)現(xiàn)遞歸查詢:文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-510398.html
SELECT * FROM (
SELECT id, pid, name FROM items WHERE id = 1
UNION ALL
SELECT i.id, i.pid, i.name
FROM items i
INNER JOIN (
SELECT * FROM (
SELECT id, pid, name FROM items WHERE id = 1
UNION ALL
SELECT id, pid, name FROM items WHERE pid = 1
) t1
) t2 ON i.pid = t2.id
) t3
在上面的語(yǔ)句中,使用了兩個(gè)子查詢,第一個(gè)子查詢獲取 ID 為 1 的記錄,第二個(gè)子查詢獲取 ID 為 1 的記錄以及其下級(jí)記錄。然后,使用 UNION ALL 將這兩個(gè)子查詢的結(jié)果合并起來(lái),實(shí)現(xiàn)遞歸查詢。
在實(shí)際使用時(shí),需要將語(yǔ)句中的 items 替換成實(shí)際的表名,將 id、pid、name 替換成實(shí)際的字段名,將 1 替換成要查詢的 ID。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-510398.html
到了這里,關(guān)于MySQL一條語(yǔ)句遞歸查詢所有子集數(shù)據(jù)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!