加入收藏 | 设为首页 | 会员中心 | 我要投稿 应用网_丽江站长网 (http://www.0888zz.com/)- 科技、建站、数据工具、云上网络、机器学习!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

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

发布时间:2021-03-05 16:24:38 所属栏目: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 1

例如,我在表格中有这些数据

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中的所有列.

(编辑:应用网_丽江站长网)

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

    热点阅读