上周面试被问到的一个题。
一张表格t_table其中存在两列A、B,如下,B是A的parent, 31是21的上级,41是31的上级,51是41的上级。用sql语句如何查询出21的所有上级。即(31,41, 51)
A B
21 31
31 41
41 51
这个题目就是用来踢mysqler的。
mysqler 不可能回答这个问题的
oracle , postgresql 可以用connect by
mysqler就是一次次的查啊查
######回复 @mark35 : connect by就是一次次地查啊查的缩写,怎么不说mysql的GROUP_CONCAT这么简易的聚集函数,在Oralce 10g中要用connect by一次次地查啊查?######是“mysqler就是一次次地查啊查”~~######mysql的快胜在简单。对于这种稍微复杂的需求无法(用一条SQL来)满足。恐怕不少mysqler就没听说过connect by, with, except等等术语######SELECT t1.A,t1.B FROM test.Test t1 left join test.Test t2 on t1.A = t2.B;######好像没办法选出全部31,41,51吧。。链接的话最多找到爷爷辈######如果不确定上级有多少层就用程序写一个递归查询。######难就难在只能使用sql。。。。######存储过程呢?######ORACLE 类似这种
######
1: 存储过程;
2:表结构增加一个字段,用来维护某个字段所有的parentIds ;
仅供参考;
######在你面试的这个题的情况,上级的数值都比当前节点的数值要大。
直接找比当前节点大的数值,然后排除重复的列。
而且也没有说明parentId是谁啊。
######这个题目就是用来踢mysqler的。
mysqler 不可能回答这个问题的
oracle , postgresql 可以用connect by
mysqler就是一次次的查啊查
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。