日期:2014-05-16  浏览次数:20491 次

INNER JOIN 多表聚合联查问题
select 表1.A,表2.B,(select sub(数量) from 表3 where Aid=表2.id group by Aid) from 表1 INNER JOIN 表2 on 表1.Bid=表2.id where 表1.Bid in(select Aid from 表3 having sub(数量)>0 group by Aid)
上面的语名如何把表3也INNER JOIN?
我试来试去都提示这个表1.A、表2.B没在group 中说。我的实际使用的语句这个表1中的字段跟表2中的字段都很多,总不可能都加入这个group中吧?而这个表3中,只有这一个数量需要用。
------解决方案--------------------
试试这个

select * from
(
   select 表3.Aid,sum(表3.数量)as 数量 from 表1 
  INNER JOIN 表3 on 表3.Aid=表1.id 
  having sum(表3.数量)>0 group by 表3.Aid
) t 
inner join 表1 on t.Aid=表1.Aid
inner join 表2 on 表1.Bid=表2.id 

------解决方案--------------------
引用:
我改成这样:
select 表1.A,表2.B,sum(表3.数量)as 数量 from 表1 INNER JOIN 表2 on 表1.Bid=表2.id INNER JOIN 表3 on 表3.Aid=表1.id having sum(表3.数量)>0 group by 表3.Aid
提示表1的字段及表2的字段都不在group中
因为表1的字段有点多,总不能让我把表1的字段全列到这个group中吧?
或者大家有没有别的好办法让这个语句快一点?


我上面写的,你试了吗:
select 表1.A,
       表2.B,
       sum_数量
from 表1 
INNER JOIN 表2 
        on 表1.Bid=表2.id 
inner join 
(
select aid,sub(数量) sum_数量
from 表3 
group by Aid
having sum(数量)>0
)t
 on 表2.id = t.aid