設(shè)為首頁收藏本站Access中國

Office中國論壇/Access中國論壇

 找回密碼
 注冊

QQ登錄

只需一步,快速開始

返回列表 發(fā)新帖
查看: 2073|回復(fù): 1
打印 上一主題 下一主題

查詢底層子節(jié)點——再談遞歸查詢

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
1#
發(fā)表于 2023-3-31 17:33:42 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
先上面試題

根據(jù)面試題,parent_id和id應(yīng)該是父子隸屬關(guān)系。比如,product1是最終產(chǎn)品。它有3個子節(jié)點product2、product5和product7,parent_id全部指向product1。為此,我這里先大致畫個架構(gòu)圖出來。

由此可見,其實答案并不正確,漏掉了product6。由于這個層級關(guān)系,因此需要使用遞歸查詢來完成相關(guān)任務(wù)。代碼如下:
  1. drop table test_log
  2. create table  test_log(id int , product_name varchar(30), parent_id int, count int)
  3. insert into test_log values
  4. (1, 'product1', null, 1),
  5. (2, 'product2', 1, 10),
  6. (3, 'product3', 2, 15),
  7. (4, 'product4', 2, 13),
  8. (5, 'product5', 1, 21),
  9. (6, 'product6', 3, 11),
  10. (7, 'product7', 1, 5)

  11. WITH  cte AS (
  12.   SELECT id, product_name, parent_id, count
  13.   FROM test_log
  14.   WHERE id NOT IN (SELECT DISTINCT parent_id FROM test_log WHERE parent_id IS NOT NULL)
  15.   UNION ALL
  16.   SELECT t.id, t.product_name, t.parent_id, t.count
  17.   FROM test_log t
  18.   JOIN cte ON t.parent_id = cte.id
  19. )
  20. SELECT * FROM cte
復(fù)制代碼
在這里,我們使用了一個子查詢來查找所有沒有子節(jié)點的節(jié)點。然后,再使用UNION ALL將每個子節(jié)點連接到其父節(jié)點。這樣,就可以查詢到所有最底層的節(jié)點了。最終結(jié)果如下:

你學(xué)廢了嗎?

本帖子中包含更多資源

您需要 登錄 才可以下載或查看,沒有帳號?注冊

x
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 分享淘帖 訂閱訂閱
2#
發(fā)表于 2023-8-16 11:15:16 | 只看該作者
多謝分享
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則

QQ|站長郵箱|小黑屋|手機版|Office中國/Access中國 ( 粵ICP備10043721號-1 )  

GMT+8, 2025-7-17 05:41 , Processed in 0.076662 second(s), 26 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回復(fù) 返回頂部 返回列表