日期:2014-05-18  浏览次数:20579 次

求高效率SQL 语句.
有三个表   分别是   A表,B表,C表
A表字段如下:     id,日期,单号,审核
b表字段如下:     单号,数量,物料ID.
C表字段如下:     id,编号,名称,规格,所属类别ID

关系如下:   A表与B表是一对多关系.   两者用   单号   字段连接
                    B表与C表是链接关系.   通过   B表的   物料ID与C表中的ID字段对应,以取得物料名称与编码等.

现要求如下:
      需要统计一,每个月的数量,要求A表已经审核,C表中的   所属类别ID在   7,10,12中.
普通SQL语句如下:
    SELECT   SUM(数量)   AS   1月份,物料ID   FROM   A表   A,B表   B,C表   C   WHERE   A.单号=B.单号   AND   B.物料ID=C.ID   AND   a.审核= '1 '   and   YEAR(日期)= '2007 '   AND   MONTH(日期)= '1 '   AND   所属类别ID   IN   (7,10,12)   GROUP   BY   物料ID
    这样相当于每月的数量只能通过12条语句计算出来,再合并,这样效率比较低,有没有更好的办法?




------解决方案--------------------
效率和执行语句的多少没有直接的关系。只要保证每个语句都是效率很高的,那么就没有太大的问题。
*****************************************************************************
SELECT SUM(数量) AS 1月份,物料ID FROM A表 A,B表 B,C表 C WHERE A.单号=B.单号 AND B.物料ID=C.ID AND a.审核= '1 ' and YEAR(日期)= '2007 ' AND MONTH(日期)= '1 ' AND 所属类别ID IN (7,10,12) GROUP BY 物料ID
*****************************************************************************
数据表关联顺序,Year(日期)这样的写法需要优化,In的写法需要优化,因为In就相当于ID = 7 or ID = 10 or ID = 12