题目是这样的:
     已知:供应量表SPJ,包含四个列:SNO(供应商号),PNO(零件号),QTY(供应量);
     求这样的供应商号,对于该供应商供应的每个项目,其所供应的零件的数量都达到或超过200,并且该供应商供应零件两种以上(含两种)。
     我是这样写的:SELECT SNO
                   FROM SPJ
                   GROUP BY SNO
                   HAVING COUNT(DISTINCT PNO)>=2
                   HAVING QTY>200;
     最后有错误,请大家帮帮忙,我的错在哪,另外正解是怎样的?(刚开始学,很什么都不会,大家见笑了)

解决方案 »

  1.   

    Having后的字段必须包含在聚合函数(如Sum,Max,Min,Count等里面),多条件之间用and相连你的语句可以写成下面的样子试试SELECT SNO
    FROM SPJ
    WHERE
    GROUP BY SNO
    HAVING COUNT(DISTINCT PNO)>=2
      

  2.   

    --按错键了SELECT SNO
    FROM SPJ
    WHERE QTY>200
    GROUP BY SNO
    HAVING COUNT(DISTINCT PNO)>=2
      

  3.   

    达到或超过200用WHERE QTY>=200或者WHERE QTY!<200
      

  4.   

    但是如果是SELECT SNO
              FROM SPJ
              WHERE QTY>200
              GROUP BY SNO
              HAVING COUNT(DISTINCT PNO)>=2;
    那么如果供应商供应3种零件,其中两种零件的的数量都达到或超过200,另外一种的数量只有100,按这个方法也会显示出这个供应商是符合题意的,然而题目所说的是供应的零件的数量都达到或超过200,就是说所有的都超过了200。这样结果就不符合要求了。???????
      

  5.   

    如果是这样的话select sno
    from spj
    where sno not in(select sno from spj where qty<200)
    group by sno
    having count(distinct pno)>=2不过较早的MySQL版本好像不支持子查询。此外,你说有4列,但是只给出了3列?
      

  6.   

    哦,我忘记改了,原题是有四列,但是有一列在这个题上没有用到,我就没把它写进来。
    你用是的子查询啊,呵呵,我知道了,谢谢louisXIV了!