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 国企 展开
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 国企 展开
展开全部
子句别用 distinct ,因为你用 not in ,用与不用distinct 结果都一样的。
另外你可以换用 not exists 试试看效果如何
另外你可以换用 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) 试试 顺便说下 没看懂你到底要查询什么
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询