select
p.newCode,p.oldCode,p.newTypeId,p.oldTypeId,
(select name from B_ProductNewType as pnt where p.newTypeId=pnt.autoId) as newType,
(select name from B_ProductOldType as pot where p.oldTypeId=pot.autoId) as oldType,
p.nj,
p.wj,
p.height,
p.weight,
--g.types,
--(select provinceId from BUSS_User as bu where g.buss_userId=bu.autoId) as provinceId,
--(select verifyStatus from BUSS_User as bu where g.buss_userId=bu.autoId) as verifyStatus,
count(g.newTypeName) as num
from B_ProductLibrary as p left join D_GoodsLibrary as g
on p.newCode=g.newCode and p.oldCode=g.oldCode and p.newTypeId=g.newTypeId and p.oldTypeId=g.oldTypeId
group by
p.newCode,p.oldCode,p.newTypeId,p.oldTypeId,p.nj,p.wj,p.height,p.weight--,g.buss_userId,g.types
order by num desc上面是代码,数据库结构如下:
B_ProductLibrary(产品库表):产品的基本参数,如newCode,oldCode,newTypeId,oldTypeId等
D_GoodsLibrary (商品库表):商品的信息,里面包含有产品库的信息,如newCode,oldCode,newTypeId,oldTypeId等,商品库与产品库没有直接外键关系,两个表的连接我也是用newCode,oldCode,newTypeId,oldTypeId这四个字段来确定的。
B_ProductNewType,B_ProductOldType:这是产品新类型和旧类型的名称表。
BUSS_User(商家表):该表与商品表有外键关系,也即商品表里有商家的外键buss_userId
要求如下:
查询显示所有的产品信息;并且如果该产品在商品库里有对应信息,则统计商品信息的数量,如果没有则为0,最后还要显示几个关于商品的信息g.types(商品类型,不是外键),provinceId(商家后属于的省),verifyStatus(商品审核状态)我的问题:
上的面的sql语句我已经得到了产品库表里相应的信息了,而且数量也统计好了,但是一加上商品表里的那三个信息后(也就是注释掉的那一块),所有的数量都变成了1,我知道问题是出在group by里面,但是因为sql功底不好,不知道要怎么解决这样的问题!!!

解决方案 »

  1.   

    看下面的運行結果對不對?
    select a.*,pnt.name as newType,pot.name as oldType,g.types,bu.provinceId,bu.verifyStatus from
    ( select p.newCode,p.oldCode,p.newTypeId,p.oldTypeId,p.nj,p.wj,p.height,p.weight,
    count(g.newTypeName) as num
    from B_ProductLibrary as p left join D_GoodsLibrary as g
    on p.newCode=g.newCode and p.oldCode=g.oldCode and p.newTypeId=g.newTypeId and p.oldTypeId=g.oldTypeId
    group by
    p.newCode,p.oldCode,p.newTypeId,p.oldTypeId,p.nj,p.wj,p.height,p.weight
    order by num desc ) as a join D_GoodsLibrary as g 
    on a.newCode=g.newCode and a.oldCode=g.oldCode and a.newTypeId=g.newTypeId and a.oldTypeId=g.oldTypeId
    left join B_ProductNewType as pnt on a.newTypeId=pnt.autoId
    left join B_ProductOldType as pot on a.oldTypeId=pot.autoId
    left join  BUSS_User as bu on g.buss_userId=bu.autoId