日期:2014-05-18  浏览次数:20546 次

LEFT JOIN的问题
碰到一个奇怪问题
SELECT   物料编码ID,物料编码,物料名称,规格型号,计量单位,仓库ID,仓库名称,供应商名称,供应商价格,市场名称,市场价格,MAX(fprice)   AS   最高价格,MIN(fprice)   AS   最低价格,AVG(fprice)   AS   平均价格,
供应商地区,市场地区
INTO   #RK1   FROM   #RK
LEFT   JOIN   ICSTOCKBILLENTRY   ICE   ON   ICE.FITEMID=#RK.物料编码ID   AND   ICE.fdcstockid=#RK.仓库ID
LEFT   JOIN   ICSTOCKBILL   IC   ON   IC.FINTERID=ICE.FINTERID
WHERE   IC.FTRANTYPE=1   AND   IC.FDATE> =@DATE5   AND   IC.FDATE <=@DATE6
GROUP   BY   物料编码ID,物料编码,物料名称,规格型号,计量单位,供应商名称,市场名称,仓库名称,仓库ID,供应商价格,市场价格,市场地区,供应商地区
ORDER   BY   物料编码

按理说显示的物料应该是#RK表中所有的物料,但是执行后发现物料少了一行
LEFT   JOIN   ICSTOCKBILLENTRY   ICE   ON   ICE.FITEMID=#RK.物料编码ID   AND   ICE.fdcstockid=#RK.仓库ID,这个地方必须要以物料和仓库做关联条件
我一直怀疑是这个地方有问题
大家帮忙看一下,谢谢

------解决方案--------------------
如果用left join ,则不要对右边的表进行where 限制,使用子查询,如下:

select *
from A
left join (select * from B where ...) T on a.id=t.id
where A....