开发者社区> 问答> 正文

sql语句怎么写。关于业务逻辑上的上级。:报错

上周面试被问到的一个题。

一张表格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


展开
收起
kun坤 2020-06-09 22:14:38 786 0
1 条回答
写回答
取消 提交回答
  • 这个题目就是用来踢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 类似这种


    select   distinct  A,B
    from  t_table
    connect 
    by  prior A = B
    start 
    with
    B = '3 1 ' ;

     

    ######

    1: 存储过程;

    2:表结构增加一个字段,用来维护某个字段所有的parentIds ;

    仅供参考;

    ######

    在你面试的这个题的情况,上级的数值都比当前节点的数值要大。

    直接找比当前节点大的数值,然后排除重复的列。

    而且也没有说明parentId是谁啊。

    ######

    引用来自“宏哥”的评论

    这个题目就是用来踢mysqler的。

    mysqler 不可能回答这个问题的

    oracle , postgresql 可以用connect by

    mysqler就是一次次的查啊查

    严重同意!######oracle 的树查询语句的,向上逐树
    ######mysql写存储过程能实现,sql语句动态的查的话搞不定
    2020-06-09 22:14:43
    赞同 展开评论 打赏
问答分类:
SQL
问答地址:
问答排行榜
最热
最新

相关电子书

更多
SQL Server 2017 立即下载
GeoMesa on Spark SQL 立即下载
原生SQL on Hadoop引擎- Apache HAWQ 2.x最新技术解密malili 立即下载