当前位置:数据库 > Oracle >>

ORACLE 查找某结果集中没有的数据

两个结果集A,B,B的数据是A的子集,现在我要求B的补集,用not in 的话,运行了2分钟还没有执行完,时间有点长,有没有其它的写法。 PS:B是用select 搜索出来的结果集,A是一张表
补充:B的补集就是一种数据的集结,这种数据在A中有,在B中没有
答案:select * from table1 minus select * from table2
试试。
其他:select * from A minus select * from B
或者你把not in 改成 not exists

不过在数据量大的情况下前者的效率是不错的 not in适用于结果集比较小的过滤,not in无法使用索引,例如id not in (1,2,3,4,5)在实际的执行计划当中被解释为 id<>1 or id<>2 or id<>3 or id<>4 or id<>5 关联的两个表比较大 not in的真集很小时 可以使用not in 效率较高, 但是如果not in所过滤掉的结果集很大时 就需要考虑使用not exists,例如
select * from a_tab a where not exists (select 'x' from b_tab b where b.id=a.id) 
但是如果两个很大的表not in所过滤掉的结果集很小的情况下使用not exists则比not in慢,因为两个表要做关联,所以使用哪种方式 取决于你实际的情况。 你的sql developer工具->首选项,里面的主目录名配置对了吗,然后你在,如果你是远程连接数据库你的instantclient_11_2文件夹下有配置过主机的地址文件吗(有个名字为tnsnames.ora的文件)
另外,虚机团上产品团购,超级便宜 

上一个:oracle能像sqlserver那样创建数据库吗?
下一个:oracle进程数设置的是1000 但是不到500就连不上数据库了

Oracle
MySQL
Access
SQLServer
DB2
Excel
SQLite
SYBASE
Postgres
如果你遇到数据库难题:
请访问www.zzzyk.com 试试
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,