Oracle中用条件关键字in查询时出错

attached 2010-11-03 02:48:52
比如这样一个SQL语句:select * from A a where a.id in(...........)假如in里面有成千上万个id值时,就会出错。
这个问题谁碰到了,怎么解决呢?
另外要考虑到效率问题,怎么解决?(实际中是夺标联立查询)用union all 连接起来可以避免问题,但是效率低的可怕。
望高手指点。。
...全文
462 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
feixianxxx 2010-11-06
  • 打赏
  • 举报
回复
把ID都放入一个表里面
然后ID上加索引 然后和A表表联接。。
crazylaa 2010-11-06
  • 打赏
  • 举报
回复
你那成千上万个id怎么来的?如果从别的表查来的,那么使用子查询。
如果外部程序生成的,那么使用全局临时表先存,然后再使用子查询。
lxyzxq2008 2010-11-05
  • 打赏
  • 举报
回复
in的里面有成千上万个,不一定是sql运行出问题,也许是你传这个id的时候出的问题,
这种查询用exists比较好,还有就是你的(...)里面的值不知道怎么来的,肯定不是入力的,要不然输入那么多,人都累死了,如果从表中来,你就不用写成这个样子了,用表做过关联就ok了~
hao1hao2hao3 2010-11-05
  • 打赏
  • 举报
回复
ID很多,建议用exists来实现,这样会提高效率的,in适合少数据量的那种情况。
kingkingzhu 2010-11-05
  • 打赏
  • 举报
回复
你的union all应该直接抛弃
理论上id来源应该是表吧 数据量大的话 用exists不然用in也ok
lnuwhy 2010-11-05
  • 打赏
  • 举报
回复
你没看三楼说的吗?用exists语句吗?另外你in里面的到底是哪的id,是不是从某个表里查的?
心中的彩虹 2010-11-05
  • 打赏
  • 举报
回复
[Quote=引用楼主 attached 的回复:]
比如这样一个SQL语句:select * from A a where a.id in(...........)假如in里面有成千上万个id值时,就会出错。
这个问题谁碰到了,怎么解决呢?
另外要考虑到效率问题,怎么解决?(实际中是夺标联立查询)用union all 连接起来可以避免问题,但是效率低的可怕。
望高手指点。。
[/Quote]
select * from A where exists(select 1 from B where a.id=b.id)
attached 2010-11-03
  • 打赏
  • 举报
回复
关键是要考虑到效率问题,查询语句由Sping执行的,每次执行都用好久的时间
xiaobn_cn 2010-11-03
  • 打赏
  • 举报
回复
想到了个笨办法,做个临时表,把那些ID放进去。
xiaobn_cn 2010-11-03
  • 打赏
  • 举报
回复
[Quote=引用楼主 attached 的回复:]
比如这样一个SQL语句:select * from A a where a.id in(...........)假如in里面有成千上万个id值时,就会出错。
这个问题谁碰到了,怎么解决呢?
另外要考虑到效率问题,怎么解决?(实际中是夺标联立查询)用union all 连接起来可以避免问题,但是效率低的可怕。
望高手指点。。
[/Quote]

不知道你那成千上万个ID是哪里来的,如果是其它表中的数据可以考虑加个子查询,如果是程序拼接出来的字符串那就没有什么好办法了。
majy 2010-11-03
  • 打赏
  • 举报
回复
用exists语句
Dota_noney 2010-11-03
  • 打赏
  • 举报
回复
不了解,没出现过这种奇怪的错误,顶起!!!

17,086

社区成员

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

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