碰到一个奇怪问题
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,这个地方必须要以物料和仓库做关联条件
我一直怀疑是这个地方有问题
大家帮忙看一下,谢谢

解决方案 »

  1.   

    如果用left join ,则不要对右边的表进行where 限制,使用子查询,如下:select *
    from A
        left join (select * from B where ...)  T on a.id=t.id
    where A....
      

  2.   


    --如果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 (select * from ICSTOCKBILL WHERE FTRANTYPE=1 AND FDATE>=@DATE5 AND FDATE<=@DATE6) IC ON IC.FINTERID=ICE.FINTERIDGROUP BY 物料编码ID,物料编码,物料名称,规格型号,计量单位,供应商名称,市场名称,仓库名称,仓库ID,供应商价格,市场价格,市场地区,供应商地区ORDER BY 物料编码
      

  3.   

    明白了,谢谢了,再试试,刚才那个办法试过了,其它的数据就会出现错误
    但是有一点不明白,为什么后面的WHERE会影响到LEFT的查询结果呢?
      

  4.   

    因为用left join T的话,T可能本省就是NULL值,这样你再用where 限定,肯定就不会显示了。