怎么实现把多个条件查询,写成视图,然后和表连接

qiang521qiang 2009-09-17 10:27:05

select distinct mbrid,dos from fi05 where
(
dx1 in('40201', '40211', '40291', '40401', '40411', '40491','4280', '4281', '42820','42821','42822','42823',' 42840','42841','42842','42843')
or dx2 in('40201', '40211', '40291', '40401', '40411', '40491','4280', '4281', '42820','42821','42822','42823',' 42840','42841','42842','42843')
......
or dx9 in('40201', '40211', '40291', '40401', '40411', '40491','4280', '4281', '42820','42821','42822','42823',' 42840','42841','42842','42843')
)
and
(
(
((cpt between '99217' and '99220') or (cpt between '99234' and '99236'))
or ((cpt1 between '99217' and '99220') or (cpt1 between '99234' and '99236'))
..........
or ((cpt9 between '99217' and '99220') or (cpt9 between '99234' and '99236'))
)
or
(
((rev between '0500' and '0529') or (rev between '0570' and '0599') or (rev between '0770' and '0779') or (rev between '0820' and '0859' )
or (rev between '0982' and '0983') or (rev = '0882'))
or((rev1 between '0500' and '0529') or (rev1 between '0570' and '0599') or (rev1 between '0770' and '0779') or (rev1 between '0820' and '0859')
or (rev1 between '0982' and '0983') or (rev1 = '0882'))
...............
or ((rev9 between '0500' and '0529') or (rev9 between '0570' and '0599') or (rev9 between '0770' and '0779') or (rev9 between '0820' and '0859')
or (rev9 between '0982' and '0983') or (rev9 = '0882'))
)
)

就这段代码怎么能把这几个查询条件写成视图啊,然后和表连接查询。都说那么查询速度会很快,我的这个查询是几百万的数据量。
...全文
227 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
qiang521qiang 2009-09-17
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 inthirties 的回复:]
普通视图应该对查询的性能没有太大的影响,类似一个query的别名而已。
[/Quote]
那应该怎么弄啊?
inthirties 2009-09-17
  • 打赏
  • 举报
回复
普通视图应该对查询的性能没有太大的影响,类似一个query的别名而已。
qiang521qiang 2009-09-17
  • 打赏
  • 举报
回复

create view test_dx as select distinct mbrid,dos from fi05 where
(
dx1 in('40201', '40211', '40291', '40401', '40411', '40491','4280', '4281', '42820','42821','42822','42823',' 42840','42841','42842','42843')
........
or dx9 in('40201', '40211', '40291', '40401', '40411', '40491','4280', '4281', '42820','42821','42822','42823',' 42840','42841','42842','42843')
)

create view test_cpt as select distinct mbrid,dos from fi05 where
(
((cpt between '99217' and '99220') or (cpt between '99234' and '99236'))
....
or ((cpt9 between '99217' and '99220') or (cpt9 between '99234' and '99236'))
)


create view test_rev as select distinct mbrid,dos from fi05 where
((rev between '0500' and '0529') or (rev between '0570' and '0599') or (rev between '0770' and '0779') or (rev between '0820' and '0859' )
or (rev between '0982' and '0983') or (rev = '0882'))
........
or ((rev9 between '0500' and '0529') or (rev9 between '0570' and '0599') or (rev9 between '0770' and '0779') or (rev9 between '0820' and '0859')
or (rev9 between '0982' and '0983') or (rev9 = '0882'))


select b.mbrid from fi05 a,test_dx b,test_cpt c,test_rev d where a.mbrid = b.mbrid and (a.mbrid = c.mbrid or a.mbrid = d.mbrid)


可以写成这样嘛? 是这么写嘛 ? 高手帮帮我吧
qiang521qiang 2009-09-17
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 inthirties 的回复:]

如果有问题,可以把你的表结构,描述一下,把你的目标结果是怎样的描述清楚,贴上来,

这里有很多的开发方面的高手,能帮你想出办法的。
[/Quote]
是这样的

条件是这样的。
有一个表fi 表中有好多的字段。主要有dx1..dx9,cpt1..cpt9,rev1..rev9,还有就是mbrid 也就是id
求出满足dx1..dx9中任意一个字段等于402.01, 402.11, 402.91, 404.01, 404.11, 404.91, 428.0, 428.1, 428.20-428.23, 428.40-428.43 其中的任意一个。
cpt1..cpt9 中任意一个字段等于99201-99205, 99211-99215, 99241-99245, 99271-99275, 99301-99313, 99315-99316, 99318-99337, 99341-99350, 99354-99355, 99381-99387, 99391-99397,99401-99429,99450, 99455-99456 中的任意一个。
rev1..rev9 中的任意一个字段等于 0500-0529, 0570-0599, 0770-0779, 0820-0859, 0882, 0982-0983 中任意一个
dx和 cpt 还有 rev的关系是 dx and (cpt or rev)
最后是求满足这些条件的人的 mbrid
inthirties 2009-09-17
  • 打赏
  • 举报
回复
数据结果集不对和用不用视图是两码事。

你把视图里的sql执行一下,数据也应该不对的。

检查一下你视图里的sql的逻辑。

如果有问题,可以把你的表结构,描述一下,把你的目标结果是怎样的描述清楚,贴上来,

这里有很多的开发方面的高手,能帮你想出办法的。
qiang521qiang 2009-09-17
  • 打赏
  • 举报
回复
谁帮帮忙解决一下啊……
谢谢了啊………………
qiang521qiang 2009-09-17
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 inthirties 的回复:]
视图不支持带参数的,如果你这里面的是会变动的一些条件的话,只能写死了。

你上面都已经写出了view呀,如果是要合并的话,最简单的就是把上面的视图用union联合起来。基于view的view
[/Quote]
我不是说非要写成视图,我现在不知道怎么办才好啊。有人告诉我说写成视图,我就写了,但是还不知道对不对啊…… 现在的结果和我一条sql语句的结果不一样…… 真烦人,现在不知道怎么办才好啊……数据量太大了,都有一千万以上的……
inthirties 2009-09-17
  • 打赏
  • 举报
回复
视图不支持带参数的,如果你这里面的是会变动的一些条件的话,只能写死了。

你上面都已经写出了view呀,如果是要合并的话,最简单的就是把上面的视图用union联合起来。基于view的view

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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