可能是我的标题描述不清楚:-)但是,下面是示例。
我有两张桌子,
表1:
SNO PARENTID
1 P01
2 P02
3 P03
4 P04
表2:
SNO CHILDID PARENTID
1 C01 P01
2 C02 P01
3 C03 P03
4 P03 P01
5 P04 P01
6 A01 P03
7 A02 P04
因此,每个ParentId都有多个子项,如
select childid from table2 where parentid = 'P01';
我会得到C01,C02,P03 AND P04
。这是正常的,
但在我的情况下,我想再次使用childids
检查这些table1(parent table)
,如果存在,那么我还需要childids
parentids
。它将一直持续到我的childid
与我的parentid
不匹配。
Ex Cont .. 在我的输出上面包含P03和P04,所以我需要带孩子C03,A01和A02 ...
我需要查询,帮助我们。
先谢谢, Stephen.L
答案 0 :(得分:1)
我不太清楚你想如何布局结果集,但你应该使用Oracle的分层查询语法:
$company->getCompanyName()
这里我忽略了T1,因为T2具有创建层次结构所需的信息。您可以在查询中加入T1,但您的问题并不清楚它扮演的角色。通过不加入它我们失去了P02的条目。但是,与T1连接将为P03和P04生成多行。
SQL> select t2.parentid
2 , lpad(' ', (level-1)*2)||t2.childid as childid
3 , level
4 from t2
5 connect by prior t2.childid = t2.parentid
6 start with t2.parentid = 'P01'
7 /
PARE CHILDID LEVEL
---- ---------- ----------
P01 C01 1
P01 C02 1
P01 P03 1
P03 A01 2
P03 C03 2
P01 P04 1
P04 A02 2
7 rows selected.
SQL>
Oracle为SQL提供了一些非常巧妙的扩展,可以处理分层数据。他们肯定是在探索。 Find out more
答案 1 :(得分:0)
你可以试试这个:
select CHILDID from tbl2 t2
join tbl1 t1 on t2.PARENTID = t1.PARENTID
START WITH t2.parentid = 'P01'
CONNECT BY NOCYCLE PRIOR CHILDID = t2.parentid;
如果CHILDID
中tbl2
检索到的tbl1
在children
中不存在,那么它将不会搜索其{{1}}
此处使用Oracle分层查询进行更多信息检查link