mysql oracle pgsql查询出多级父级内容和多级子级内容

mysql

BUS_COMPANY表结构

COMPANY_NO   PARENT_ID

-1                            -2

0                            -1
1                            0
2                            -1
3                            2
4                           -1
5                           -1
6                           -1

7                           6

查询出多级父级内容(不包含自身)

SELECT T2.COMPANY_NO
            FROM (
                  SELECT
                    @r AS _id,
                    (SELECT @r := parent_id FROM BUS_COMPANY WHERE COMPANY_NO = _id) AS parent_id,
                    @l := @l + 1 AS lvl FROM (SELECT @r := #{companyNo}, @l := 0) vars,
                    BUS_COMPANY h 
                 ) T1 JOIN BUS_COMPANY T2 ON T1._id = T2.COMPANY_NO where T2.COMPANY_NO not in (#{companyNo}) ORDER BY T1.lvl DESC;

查询出多级父级内容(包含自身)

SELECT T2.sign,T2.`name`,T2.code
        FROM (
                    SELECT
                        @r AS _id,
                        (SELECT @r := parent_sign FROM corp_dept WHERE sign = _id) AS parent_sign,
                        @l := @l + 1 AS lvl FROM (SELECT @r := `sign`, @l := 0 FROM corp_dept WHERE `sign` = '11003') vars,
                        corp_dept h
                 ) T1 JOIN corp_dept T2 ON T1._id = T2.sign  ORDER BY T1.lvl DESC;

查询出多级子级内容(不包含自身)

SELECT COMPANY_NO FROM
  (
    SELECT * FROM BUS_COMPANY  ORDER BY PARENT_ID, COMPANY_NO DESC
  ) k1,
  (SELECT @pv :=#{companyNo}) k2
  WHERE (FIND_IN_SET(PARENT_ID,@pv)>0 And @pv := concat(@pv, ',', COMPANY_NO)) ;

查询出多级子级内容(包含自身)

 select sign,name,code from 
        (select sign,name,code,parent_sign from corp_dept ORDER BY parent_sign,sign DESC) k1,
        (select @pv :='15106') k2
        WHERE (FIND_IN_SET( parent_sign, @pv )> 0 and @pv := concat( @pv, ',', sign )) OR sign='15106' ;

FIND_IN_SET(str,strlist)函数

str 要查询的字符串

strlist 字段名 参数以”,”分隔 如 (1,2,6,8)

查询字段(strlist)中包含(str)的结果,返回结果为null或记录

mysql CONCAT()函数用于将多个字符串连接成一个字符串,是最重要的mysql函数之一,下面就将为您详细介绍mysql CONCAT()函数,供您参考

mysql CONCAT(str1,str2,…)                        
返回结果为连接参数产生的字符串。如有任何一个参数为NULL ,则返回值为 NULL。或许有一个或多个参数。 如果所有参数均为非二进制字符串,则结果为非二进制字符串。 如果自变量中含有任一二进制字符串,则结果为一个二进制字符串。一个数字参数被转化为与之相等的二进制字符串格式;若要避免这种情况,可使用显式类型 cast, 例如: SELECT CONCAT(CAST(int_col AS CHAR), char_col)

mysql> SELECT CONCAT(’My’, ‘S’, ‘QL’);

-> ‘MySQL’

oracle

--查找一个节点的所有直属子节点(所有后代)
select * from bus_test m start with m.id=9 connect by m.parent_id=prior m.id;
--查找一个节点的所有直属父节点(祖宗)
select * from bus_test m start with m.id=13 connect by prior m.parent_id=m.id;

pgsql

查询当前父级节点的所有下级节点数据(包含父级)

WITH RECURSIVE temp AS
( SELECT *
FROM table
WHERE id = 1139011968570085378
UNION ALL
SELECT b.*
FROM temp,table b
WHERE x.id = b.parent_id

)
SELECT * FROM temp;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值