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

mysql – 如何离开连接或内部连接表本身

发布时间:2021-03-05 11:26:18 所属栏目:MySql教程 来源:网络整理
导读:例如,我在表格中有这些数据 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中的所有列.

(编辑:52站长网)

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

    热点阅读