有个三个表 A ,B ,C
A 表 10万条记录
B 表 20万条记录
C 表 100万条记录A表 (产品表)  PRIMARY(id)
id   name
编号  名称
B表 (库存表)  PRIMARY(year,month,bmh,id) 索引(id)
id   year  month   bmh    kcsl
编号   年    月     部门号  库存数量
C表 (销售记录表)  PRIMARY(rq,bmh,id)   索引(id)
id    rq    bmh     sell
编号  日期   部门号   销售数量
功能:更具A(产品表)列出 库存数量 和 销售数量的对比
如:查询条件 
1.库存账为   2012年06月
2.销售时间为 2012-06-01 至 2012-06-30
3.部门号为   001查询结果例如:
id   name  kcsl  sell
1001  苹果   10    3
1002  香蕉    0    1
1003  西瓜    0    0
1004  桃子    5    0
.
.
.
.本人测试了多种写法,查询速度都在几分钟以上,请教这个多表连接的查询语句该如何写,或有什么更好的建议!谢谢

解决方案 »

  1.   

    select d.spbh,d.kcsl ,e.xssl from (select a.id , b.kcsl from a left outer join b on a.id = b.id and b.year='2012' and b.month='06' and b.bmh='001') d left outer join  (select c.spbh , sum(c.xssl) from c where c.rq between '2012-06-01' and '2012-06-30' and c.bmh='001' group by c.spbh) e on d.spbh = e.spbh
      

  2.   

    上面有误 ,更正如下
    select d.id,d.kcsl ,e.sell from (select a.id , b.kcsl from a left outer join b on a.id = b.id and b.year='2012' and b.month='06' and b.bmh='001') d left outer join  (select c.id, sum(c.sell) from c where c.rq between '2012-06-01' and '2012-06-30' and c.bmh='001' group by c.id) e on d.id= e.id
      

  3.   

    贴出你的 
    explain select d.id,d.kcsl ,e.sell 
    from (select a.id , b.kcsl from a left outer join b on a.id = b.id and b.year='2012' and b.month='06' and b.bmh='001') d 
    left outer join  
    (select c.id, sum(c.sell) from c where c.rq between '2012-06-01' and '2012-06-30' and c.bmh='001' group by c.id) e 
    on d.id= e.id
    及 show index from ... 以供分析。