table A :2千万条数据, table B: 2亿条数据A表结构单号 时间
111 2012-1
112 2012-2
113 2012-3
B表结构
单号 动作 时间
111 M 2012-1-1
111 N 2012-1-2
111 P 2012-1-3
111 Q 2012-1-4
112 M 2012-1-5
113 M 2012-1-6
113 N 2012-1-6当A表产生一条记录的时候,相应B表会产生一个对应单号的M动作的记录,求:在B表中只有一个动作M的单号和A表对应的相应信息。按照例子信息,得出112 2012-2 这一条记录。或者根据B表一个表,能查出112这一条记录也行各位大侠,因为两个表中数据量较大,所以正常逻辑虽然可以通过,但是会很很很很慢,能否给出牛B逻辑
111 2012-1
112 2012-2
113 2012-3
B表结构
单号 动作 时间
111 M 2012-1-1
111 N 2012-1-2
111 P 2012-1-3
111 Q 2012-1-4
112 M 2012-1-5
113 M 2012-1-6
113 N 2012-1-6当A表产生一条记录的时候,相应B表会产生一个对应单号的M动作的记录,求:在B表中只有一个动作M的单号和A表对应的相应信息。按照例子信息,得出112 2012-2 这一条记录。或者根据B表一个表,能查出112这一条记录也行各位大侠,因为两个表中数据量较大,所以正常逻辑虽然可以通过,但是会很很很很慢,能否给出牛B逻辑
解决方案 »
- 10g rac添加节点报错Failed To Upgrade Oracle Cluster Registry Configuration When Runnin
- 如何按顺序提取数据
- oracle存储过程通过ftp包上传文件txt后乱码问题
- ORA-12570:TNS:包阅读程序失败出错,出错。我该咋办??谁能 help me?
- SQL语句求助.急.
- VC 环境下 pro*c/c++ 编程的问题!
- 关于 采用 pfile 和spfile
- 请教一下,oracle数据库里面有没有取余数的函数!
- 你所知的有关ORACAL的好的专业站点!过内外都可!
- order by 子句中字段值不唯一导致检索结果出现重复的问题
- oracel数据库 表操作求高手指点
- 请高手指点下SQL
select * from a where orderno in (
select orderno from b
group by orderno having count(1)=1)如楼上所说,再牛逼也得按规矩来。这个样子差不多了。另外在a表单号和b表单号上都加上索引吧,a表单号应该是唯一索引。
TABLESPACE uwdata
BUILD IMMEDIATE
REFRESH FAST ON COMMIT AS
SELECT * FROM B WHERE ACTION = 'M'
group by orderno having count(1)=1(create an index on action column)
from b
,(select dh,rq,count(*) over (partition by dh) cn
from a
where a.dz = 'M'
) a2
where a2.dh = b.dh and a2.rq = b.rq and a2.cn = 1;