技術(shù) 點
- 技術(shù)
- 點
- V幣
- 點
- 積分
- 22850
|
先上面試題
根據(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ù)。代碼如下:
- drop table test_log
- create table test_log(id int , product_name varchar(30), parent_id int, count int)
- insert into test_log values
- (1, 'product1', null, 1),
- (2, 'product2', 1, 10),
- (3, 'product3', 2, 15),
- (4, 'product4', 2, 13),
- (5, 'product5', 1, 21),
- (6, 'product6', 3, 11),
- (7, 'product7', 1, 5)
- WITH cte AS (
- SELECT id, product_name, parent_id, count
- FROM test_log
- WHERE id NOT IN (SELECT DISTINCT parent_id FROM test_log WHERE parent_id IS NOT NULL)
- UNION ALL
- SELECT t.id, t.product_name, t.parent_id, t.count
- FROM test_log t
- JOIN cte ON t.parent_id = cte.id
- )
- SELECT * FROM cte
復(fù)制代碼 在這里,我們使用了一個子查詢來查找所有沒有子節(jié)點的節(jié)點。然后,再使用UNION ALL將每個子節(jié)點連接到其父節(jié)點。這樣,就可以查詢到所有最底層的節(jié)點了。最終結(jié)果如下:
你學(xué)廢了嗎?
|
本帖子中包含更多資源
您需要 登錄 才可以下載或查看,沒有帳號?注冊
x
|