加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

mysql – 怎样分开毗连或内部毗连表自己

发布时间:2021-03-05 11:47:45 所属栏目:编程 来源:网络整理
导读:譬喻,我在表格中有这些数据 id name parent parent_id1 add self 1002 manage null 1003 add 10 2004 manage null 2005 add 20 3006 manage null 300 我怎样分开毗连或内部毗连这个表自己,以是我获得这个功效下面? id name parent2 manage self4 manage 106

譬喻,我在表格中有这些数据

id      name        parent      parent_id
1       add         self        100
2       manage      null        100
3       add         10          200
4       manage      null        200
5       add         20          300
6       manage      null        300

我怎样分开毗连或内部毗连这个表自己,以是我获得这个功效下面?

id      name        parent
2       manage      self
4       manage      10
6       manage      20

正如我所知,我只想行使要害字’manage’查询行,但我想将add的行中的列parent数据作为功效中manage的行中的as.

也许吗?

编辑:

我的现实表格的简化版本 – 体系,

system_id   parent_id   type    function_name       name        main_parent         make_accessible     sort
31          30          left    main                Main        NULL                0                   1
32          31          left    page_main_add       Add         self                0                   1
33          31          left    page_main_manage    Manage      NULL                0                   2

我的现实查询已经很是紊乱……

SELECT 
    a.system_id,a.main_parent,b.name,b.make_accessible,b.sort

FROM system AS a

INNER JOIN -- self --
(
    SELECT system_id,name,make_accessible,sort
    FROM system AS s2

    LEFT JOIN -- search --
    (
    SELECT system_id AS parent_id
    FROM system AS s1
    WHERE s1.function_name = 'page'
    ) AS s1

    ON s1.parent_id = s2.parent_id

    WHERE s2.parent_id = s1.parent_id
    AND s2.system_id != s1.parent_id
    ORDER BY s2.sort ASC
) b
ON b.system_id = a.parent_id


WHERE a.function_name LIKE '%manage%'
ORDER BY b.sort ASC

我获得的功效,

system_id   main_parent     name    make_accessible sort
33          NULL            Main    0                1

但我在此之后,

system_id   main_parent     name    make_accessible sort
33          self            Main    0                1
最佳谜底 您只必要两次引用该表:

select t1.id,t1.name,t2.id,t2.name
from TableA t1 
  inner join TableA t2
    on t1.parent_id = t2.Id

假如要在列表中查察根,请将内部替代为左毗连.

更新:

我误解了你的题目.在我看来,你老是有两行,打点一行并添加一行.要从manage得到“添加”:

select system.*,(select parent 
                    from system s2 
                   where s2.parent_id = system.parent_id 
                     and s2.name = 'add') 
                 AS parent
from system
where name = 'manage'

可能,您可以将表拆分为两个派生表,并通过parent_id毗连它们:

select *
  from system
  inner join
  (
     select * from system where name = 'add'
  ) s2
    on system.parent_id = s2.parent_id
  where system.name = 'manage'

这将应承您行使s2中的全部列.

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读