碰到一个奇怪问题
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,这个地方必须要以物料和仓库做关联条件
我一直怀疑是这个地方有问题
大家帮忙看一下,谢谢
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,这个地方必须要以物料和仓库做关联条件
我一直怀疑是这个地方有问题
大家帮忙看一下,谢谢
from A
left join (select * from B where ...) T on a.id=t.id
where A....
--如果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 物料编码
但是有一点不明白,为什么后面的WHERE会影响到LEFT的查询结果呢?