sql语句in 后面跟的数据过多怎么解决

chunguangblog 2008-09-09 04:56:52
高手指点: 有什么好办法?????
select po_order_b.pk_arrvstoorg pk_arrvstoorg,
po_order.cvendorbaseid cvendorbaseid,
bd_invbasdoc.pk_invcl pk_invcl,
po_order.vdef7 vdef7,
sum(po_order_b.nordernum) nordernum,
sum(po_order_b.naccumstorenum) naccumstorenum
from po_order_b po_order_b, po_order po_order, bd_invbasdoc bd_invbasdoc
where ((po_order_b.corderid in ('1001A810000000009QDS', '1001A810000000009QDW', '1001A810000000009QE0', '1001A810000000009QE8', '1001A810000000009QF8', '1001A810000000009QFC', '1001A810000000009QG1', '1001A810000000009QG5', , '1001A810000000009RP2', '1001A810000000009RRM', '1001A810000000009RRV', ...................................300个项
...全文
1255 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
haibin1711 2008-09-09
  • 打赏
  • 举报
回复
sb,没看到
'1001A810000000009QDS', '1001A810000000009QDW', '1001A810000000009QE0', '1001A810000000009QE8',
'1001A810000000009QF8', '1001A810000000009QFC', '1001A810000000009QG1', '1001A810000000009QG5',
'1001A810000000009RP2', '1001A810000000009RRM', '1001A810000000009RRV', 这些数据的特点吗?

'1001A810000000009'都是一样的啊。

你可以:
select po_order_b.pk_arrvstoorg pk_arrvstoorg,
po_order.cvendorbaseid cvendorbaseid,
bd_invbasdoc.pk_invcl pk_invcl,
po_order.vdef7 vdef7,
sum(po_order_b.nordernum) nordernum,
sum(po_order_b.naccumstorenum) naccumstorenum
from po_order_b po_order_b, po_order po_order, bd_invbasdoc bd_invbasdoc
where ((po_order_b.corderid like ('1001A810000000009_ _ _')
mayuanfei 2008-09-09
  • 打赏
  • 举报
回复
没有必要吧。我以前也遇到这种情况过,大概有1000多个ID。
我的方法是把 id in ('1000','1001'...) 变成 where (id='1000' or id='1001' or .....)
loaferwang 2008-09-09
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 mengweilil 的回复:]
嗯,创建个表

然后 select * from ??? where >>> in (select * from """)
[/Quote]
就是这样说的呀,对于这样的问题,是导入数据时引起的,可以用exel表格式化,最后一次性导入到一个临时表中,可以用这样的方法查询得到呀
wxinb 2008-09-09
  • 打赏
  • 举报
回复
使用子查询的话 效率会很慢的 可以在(JAVA)程序里面做啊 使用StringBuffer去循环拼字符串。
mengweilil 2008-09-09
  • 打赏
  • 举报
回复
嗯,创建个表

然后 select * from ??? where >>> in (select * from """)
lizhi1026 2008-09-09
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 fosjos 的回复:]
为什么会出现这种情况呢,流程是怎么样的

要缩短的话,可以用po_order_b.corderid like '1001A810000000009___' and 后几位 in ('...','...',...)
[/Quote]

治标不治本。。。
觉得只有把所有的数据放在临时表里这个方法了。。
  • 打赏
  • 举报
回复
不能确定oracle以外的数据库是否支持。。。
  • 打赏
  • 举报
回复
select po_order_b.pk_arrvstoorg pk_arrvstoorg,
po_order.cvendorbaseid cvendorbaseid,
bd_invbasdoc.pk_invcl pk_invcl,
po_order.vdef7 vdef7,
sum(po_order_b.nordernum) nordernum,
sum(po_order_b.naccumstorenum) naccumstorenum
from po_order_b po_order_b, po_order po_order, bd_invbasdoc bd_invbasdoc
where po_order_b.corderid exists (...)....
fosjos 2008-09-09
  • 打赏
  • 举报
回复
为什么会出现这种情况呢,流程是怎么样的

要缩短的话,可以用po_order_b.corderid like '1001A810000000009___' and 后几位 in ('...','...',...)
jabeginner 2008-09-09
  • 打赏
  • 举报
回复
直接列出来肯定是不现实的啦!最好就多建个表,把枚举的那些字段存在表里,然后再用嵌套查询,应该就可以啦
lizhi1026 2008-09-09
  • 打赏
  • 举报
回复
1楼,这样效率高点么?
Sou2012 2008-09-09
  • 打赏
  • 举报
回复
..oh...memory leak..
justinavril 2008-09-09
  • 打赏
  • 举报
回复
[Quote=引用楼主 chunguangblog 的帖子:]
高手指点: 有什么好办法?????
select po_order_b.pk_arrvstoorg pk_arrvstoorg,
po_order.cvendorbaseid cvendorbaseid,
bd_invbasdoc.pk_invcl pk_invcl,
po_order.vdef7 vdef7,
sum(po_order_b.nordernum) nordernum,
sum(po_order_b.naccumstorenum) naccumstorenum
from po_order_b po_order_b, po_order po_order, bd_invbasdoc bd_invbasdoc
where ((po_order_b.corderid…
[/Quote]
Regular expression? I don't know. Just guess...
内存泄漏 2008-09-09
  • 打赏
  • 举报
回复
把这些数据写到一个临时表里面的某字段下,然后:
select po_order_b.pk_arrvstoorg pk_arrvstoorg,
po_order.cvendorbaseid cvendorbaseid,
bd_invbasdoc.pk_invcl pk_invcl,
po_order.vdef7 vdef7,
sum(po_order_b.nordernum) nordernum,
sum(po_order_b.naccumstorenum) naccumstorenum
from po_order_b po_order_b, po_order po_order, bd_invbasdoc bd_invbasdoc
where po_order_b.corderid in (select 临时字段 from 临时表)

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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