我想查询指定级别的数据表。
例如,我想询问父子之间关系的深度1,那就是我的方式。
1。我首先递归查询所有数据的级别。
SELECT c.cid,pcid,level lv
FROM qm_product_cat c
start with pcid='0' CONNECT BY PRIOR CID=pcid
2。然后我查询,
select * from (
SELECT c.cid,pcid,level lv
FROM qm_product_cat c
start with pcid='0' CONNECT BY PRIOR CID=pcid
) where lv = 1
问题:这是如此缓慢和重复。为什么?你有更好的方法吗?
答案 0 :(得分:0)
如果您只对第一级的行感兴趣,那么您根本不需要分层查询,也不需要内部联接查询,
只需添加where pcid='0'
子句:
select cid, pcid from qm_product_cat where pcid = '0';
...但是如果你坚持使用层次结构,或者你想要从最高级别到3级的行,你可以在connect by clause
中添加级别条件:
select cid,pcid,level lv
from qm_product_cat c
start with pcid='0'
connect by prior cid=pcid AND LEVEL<=1;
这种方式查询在指定级别停止,不会进一步下降。