譬喻,我在表格中有这些数据
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中的全部列.
(编辑:湖南网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|