日期:2014-05-17  浏览次数:20783 次

left join查询结果不对啊。。求解
本帖最后由 jimoyapi 于 2013-10-15 16:31:14 编辑
我想查询有订货的款色码的销售和库存情况。
a表,门店,款号,类别,年份,季节,颜色,尺码,订货数量
b表,门店,款号,颜色,尺码,销售数量
c表,门店,款号,颜色,尺码 ,库存
select a.*,b.销售数量,c.库存
from a
left join b
on a.门店=b.门店 and a.款号=b.款号 and a.颜色=b.颜色 and a.尺码=b.尺码
left join c
on a.门店=c.门店 and a.款号=c.款号 and a.颜色=c.颜色 and a.尺码=c.尺码

这样有没有错误啊

怎么出来的查询结果比实际的要大啊,好像是有重复的

------解决方案--------------------
引用:
Quote: 引用:

on后面加主键就可以了,没必要全部字段写出来,left join本来就可能出现重复数据,如果你不要null值,就用inner join

没有主键,a,b,c都是查询几个表的结果,我想以a为基准,不管有没有销售有没有库存都显示a表所有列

关联不唯一,也就是 a表的一条数据对应b或者C表多条数据,才会导致数据行打印A表数据行
------解决方案--------------------
那你先不B,C汇总,用这个试试:
select a.门店,a.款号,a.颜色,a.尺码,sum(销售数量),sum(库存数量)
from a left join b on a.xx=b.xx
left join c on a.xx=c.xx
group by a.门店,a.款号,a.颜色,a.尺码
如果数据没问题,再把其他字段带出来
------解决方案--------------------
是否在b,c里面sum,视乎汇总的数量是否要与A的有关系,不过如果你的B,C都已经有一些A中的字段,那么可以先sum再关联