|
先上面试题
根据面试题,parent_id和id应该是父子隶属关系。比如,product1是最终产品。它有3个子节点product2、product5和product7,parent_id全部指向product1。为此,我这里先大致画个架构图出来。
由此可见,其实答案并不正确,漏掉了product6。由于这个层级关系,因此需要使用递归查询来完成相关任务。代码如下:
- 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
复制代码 在这里,我们使用了一个子查询来查找所有没有子节点的节点。然后,再使用UNION ALL将每个子节点连接到其父节点。这样,就可以查询到所有最底层的节点了。最终结果如下:
你学废了吗?
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
|