当前位置: 代码迷 >> Oracle管理 >> 关于子查询的条件,该怎么处理
  详细解决方案

关于子查询的条件,该怎么处理

热度:78   发布时间:2016-04-24 04:10:39.0
关于子查询的条件
有这样两个表
表A
aaa  bbb   ccc
---------------------------------
a1    b1     100
a2    b2     200
a3    b3     300

表B
aaa   bbb   ddd
---------------------------------
a1      b1     d1
a2      b2     d2
a3      b3     d3

有这样一个sql
SELECT * from 表B
INNER JOIN 
(SELECT aaa, bbb, sum(ccc) from 表A group by aaa, bbb) 表TEMP
ON 表B.aaa = 表TEMP.aaa AND 表B.bbb = 表TEMP.bbb
where ..........


因为
第一,在子查询中会把表A的所有行都合计,在表A中有很多数据的时候,担心会特别慢
第二,由于适当的where条件,会过滤掉表B中的很多数据,也就是说为了每次检索1,2条数据就得把表A的所有内容都合计一遍

由于这个子查询是一个更为复杂的查询,这里只是用这个表A举个例子,所以关于innerjoin子查询的这个结构没法改

请问怎么才能在执行子查询的时候就把条件限制住,只合计表A中有用的数据呢
谢谢了

------解决思路----------------------
条件直接加呗,用in或exists
(SELECT aaa, bbb, sum(ccc) from 表A
where exists(select 1 from 表B
    where 表B.aaa= 表A.aaa and 表B.bbb= 表A.bbb
    and 表B的其他条件
)
group by aaa, bbb) 表TEMP
  相关解决方案