oracle中的not in可以换成什么写法后效率更高

selecta.nofromtableawherea.区别In(1,2)anda.时间between~and~anda.nonotin(selectdistincta.n... select a.no from table a
where a.区别 In (1,2)
and a.时间 between ~ and ~
and a.no not in(select distinct a.no from table a,table b where a.区别=1 and b.来源<>'合资' and a.id=b.id and a.时间 between ~ and ~)
数据量有点大,时间选长的话,not in 会非常慢 表里的数据是这样的
table a table b
—————————————— ————————————————
no 区别 id id 来源
001 1 123 123 合资
001 1 456 456 外企
001 2 789 789 国企
002 2 789 432 国企
002 3 432
不用not in 的话,不能把不想要的no排除,用的话效率太低,麻烦各位大虾帮我改改
table a table b
_________________ ________________
no 区别 id id 来源
001 1 123 123 合资
001 1 456 456 国企
001 2 789 789 国企
002 1 321 321 合资
002 2 654 654 国企
展开
 我来答
zhenxin0603
2014-12-25 · TA获得超过600个赞
知道小有建树答主
回答量:600
采纳率:100%
帮助的人:453万
展开全部
子句别用 distinct ,因为你用 not in ,用与不用distinct 结果都一样的。
另外你可以换用 not exists 试试看效果如何
追问
not exists在这里面如何用
追答
select * from tab1 where col1 not in (select col2 from tab2)
可改写为
select * from tab1 where not exists(select col2 from tab2 where tab2.col2=tab1.col1)
试试吧
匿名用户
2014-12-25
展开全部
NOT exists
更多追问追答
追问
具体的如何写啊?
追答
select a.no
from table a
where a.区别 In (1,2)
and a.时间 between and
and a.no not exists (select distinct a.no
from table b
where a.区别 = 1
and b.来源 '合资'
and a.id = b.id
and a.no=b.no
and a.时间 between and) 试试 顺便说下 没看懂你到底要查询什么
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式