Oracle同一张表内使用In语句查询,多层嵌套如何进行优化?

Qzcipccisv 2012-12-11 03:33:50
select * from wms_depot T where T.DEPOTID IN
(select T.DEPOTID from wms_depot T where T.DEPOTID
IN (select T.DEPOTID from wms_depot T where T.DEPOTID = 10002 OR T.DEPOTPARENTID = 10002)
OR T.DEPOTPARENTID IN (select T.DEPOTID from wms_depot T where T.DEPOTID = 10002 OR T.DEPOTPARENTID = 10002))
OR T.DEPOTPARENTID IN (select T.DEPOTID from wms_depot T where T.DEPOTID
IN (select T.DEPOTID from wms_depot T where T.DEPOTID = 10002 OR T.DEPOTPARENTID = 10002)
OR T.DEPOTPARENTID IN (select T.DEPOTID from wms_depot T where T.DEPOTID = 10002 OR T.DEPOTPARENTID = 10002))
...全文
593 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
linwaterbin 2012-12-12
  • 打赏
  • 举报
回复
1)通过把in换为exists,看看执行计划有无改善 2)用with子句,把in的部分先灌进临时表,再来select,如果数据量不大的话
hudingchen 2012-12-12
  • 打赏
  • 举报
回复
看了半天才看明白,根据一个部门id求出它的下面所有的部门,嵌套这么层干嘛啊,汗。。 看看下面的写法是否满足你的需求:

SELECT t.*
  FROM wms_depot t
 START WITH t.DEPOTID = 10002
CONNECT BY PRIOR t.DEPOTID = t.DEPOTPARENTID
StriveYung 2012-12-11
  • 打赏
  • 举报
回复
你们谁有统计多个表的存储过程嘛 有的话借来 参考 参考我的qq980827202 谢谢了
SSH198 2012-12-11
  • 打赏
  • 举报
回复
可以使用ORACLE中的集合函数进行优化。

3,491

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧