+ -
当前位置:首页 → 问答吧 → 3表联查,求sql优化,大侠进入……

3表联查,求sql优化,大侠进入……

时间:2011-12-19

来源:互联网

我有3个表,a,b,c
a和b的数据量很大,c的20多条
贴上sqlSQL code

SELECT 

    c.字段1 AS 字段1, c.字段2 AS 字段2, COUNT(b.字段3) AS 字段3, SUM(b.字段4) AS 字段4, SUM(b.字段5) AS 字段5, SUM(b.字段6) AS 字段6, SUM(b.字段7) AS 字段7, SUM(b.字段8) AS 字段8 
    
FROM 
    
    (SELECT 字段1,字段2 FROM 表1 WHERE useable = 1 AND (role IN (111,112) )) c
    
     LEFT OUTER JOIN 
     
    (SELECT 
        a.字段1 AS 字段1, a.字段2 AS 字段2, a.字段3 AS 字段3, COUNT(j.id) AS 字段4, SUM(j.字段5) AS 字段5, SUM(j.字段6) AS 字段6, SUM(j.字段7) AS 字段7, SUM(j.字段8) AS 字段8 
    FROM 
        (SELECT 
            u.字段1 AS   字段1, u.字段2 AS 字段2, o.字段3 FROM 表1 u 
        LEFT OUTER JOIN 
            表2 o 
        ON u.字段1 =   o.字段1 WHERE  (o.dp_time BETWEEN '2011-11-19 00:00:00' AND '2011-12-19 23:59:59') 
        ) a 
        LEFT OUTER   JOIN 
        表3 j 
        ON a.字段3 = j.字段3 
        GROUP BY 
        a.字段1, a.字段2, a.字段3) b 

    ON c.字段1 = b.字段1 

GROUP BY c.字段1, c.字段2 
ORDER BY c.字段2 


也许我写的sql过于繁琐,所以求优化,或着求新的写法
大概是 
表1 与 表2 是1对多
表2 与 表3 是1对多
主心骨是(其他字段的可省):
我要的到是查询表1中的字段1的表2中的条数和表3中的条数和表3中的总款(字段5678)
比如:表1 小明,表2有2条数据 (一支笔,一块橡皮) 表3 笔(3条数据(笔芯,笔套,笔盖,金额))橡皮(2条(颜色,形状,金额))
结果:小明,2,5,总金额
不知道我表达清楚没有

作者: aa331730417   发布时间: 2011-12-19

作者: hefeng_aspnet   发布时间: 2011-12-20