我用一个已经写好的存储过程实现分页,存储过程名为mypage,这里面有个参数@tb表示表名,建这个存储过程的人在用的时候,@tb="news"表,我现在想要做的是,要从两个表中查询,例如:select a.a,a.b,c.c,c.d from a,b where a.a=c.c and c.d<>0,我在用存储过程时,@tb="a,b",一运行总是出错,详细信息如下:
聚合不应出现在 WHERE 子句中,除非该聚合位于 HAVING 子句或选择列表所包含的子查询中,并且要对其进行聚合的列是外部引用。
这是怎么回事,是不是我的语句写错了

解决方案 »

  1.   

    真实SQL看看
    这个
    select a.a,a.b,c.c,c.d from a,b where a.a=c.c and c.d<>0
    没用到B表呀。
      

  2.   

    提示你聚合函数 那就再你查询的地方以及group by 相对应的地方找阿
      

  3.   

    真实SQL语句是这样的:
    select ware.wid,ware.wname,sayword.wid,sayword.stile from ware,sayword where ware.wid=sayword.wid and sayword.bokeid<>0
      

  4.   

    你的ware.wid和sayword.wid在结果集里重名了,你给他们其中一个取个别名,例如:
    select ware.wid wid1,ware.wname,sayword.wid,sayword.stile from ware,sayword where ware.wid=sayword.wid and sayword.bokeid<>0
      

  5.   

    select ware.wid wid1,ware.wname,sayword.wid,sayword.stile from ware,sayword where ware.wid1=sayword.wid and sayword.bokeid<>0
      

  6.   

    不是这个的原因,我试过了,还有一个问题就是,这样查询出来的结果是:同一个商品的记录都显示出来了,能不能只显示一个,然后我再写一个页面,显示这个商品的全部评论,其中wid表示商品编号,SWORD表示评论
      

  7.   

    我不是太明白楼上的意思.我是一个初学者,很菜,呵呵
    假如表中内容如下
    name      id       stitle
    铅笔       1         好漂亮
    铅笔       1         好便宜       
    钢笔       2         好用
    钢笔       2         好漂亮
    我想实现以下结果:
    name      id       stitle
    铅笔       1         好漂亮
    钢笔       2         好用
    怎么写语句
      

  8.   

    LZ可以这样写:
    select name,min(id) as id,min(stitle) as stitle from Table
    group by name
      

  9.   

    楼上的我看明白了,不过我只是举了一个简单的例子,实际操作中还有别的条件,比如说数据库中有两个表,一个是ware,其中的字段是wid,wname,一个表是sayword,其中的字段是wid,stitle,sword,sid
    wid表示商品编号,sword表示对该商品的评论,举一个例子来说,如果对于商品编号为1和2的两种商品,肯定各自有很多条评论,我想让商品1和2都只显示出一条记录,显示出的记录包括这几个字段
    wid,wname,sword
    还有一个条件是sid<>0
      

  10.   

    select ware.wid,ware.wname,min(sayword.sword) from ware,sayword where ware.wid=sayword.wid and sayword.sid<>0
    group by ware.wid,ware.wname
      

  11.   

    如果sayword表中还有两个字段unicknme,表示发表评论的用户名,想要把这两个也显示出来,怎么写
      

  12.   

    为什么不用两个参数传表名?
     select wid,wname from ware,(select distinct wid,sword from sayword) as say where ware.wid=say.wid
    看看可以吗?
    我没实验,哪里错了再告诉我说
      

  13.   

    如果是这样的话,评论表必须存在唯一主键sayword.sid, 
    sayword.wid 是ware表的外键
    select x.wid,x.wname,sayword.sword,sayword.unicknme, ......
    from
    (select ware.wid wid,ware.wname wname,min(sayword.sid) sid from ware,sayword where ware.wid=sayword.wid and sayword.sid<>0
    group by ware.wid,ware.wname) x, sayword
    where x.sid = sayword.sid
      

  14.   

    楼上的,好象是不行,首先distinct后的数据类型不对,还有就是,这样只能显示出wid ,wname,别的字段没有了
      

  15.   

    select ware.wid wid,ware.wname wname,min(sayword.sid) sid from ware,sayword where ware.wid=sayword.wid and sayword.sid<>0
    group by ware.wid,ware.wname
    这个语句目的是为每个商品获取对应该商品的最初的一条评论记录编号,这个语句的结果集将作为一个表与评论表进行联合查询,由于前面的查询结果集中sid唯一,所以可以用这个作为关联键直接获取评论表中对应的记录