在Sql中加入Null不匹配

时间:2013-04-24 13:21:37

标签: sql oracle oracle11g

在下面的查询中  c.EXTRA_CALLOFF_FLAG = a.EXTRA_CALLOFF_FLAG它有两个匹配项,一个是Y,其他值是NULL

SELECT PICKUP_WK_NBR,REGION_CD,GLOBAL_DUNS_NBR,GLOBAL_SUPPLIER_NAME,a.EXTRA_CALLOFF_FLAG,
       nvl((SELECT sum(c.CALLOFF_QTY)
               FROM GMMT_OWNER.OR_SA_ATTAIN_DTL_T c join GMMT_OWNER.OR_SA_INCOTERMS_T d
                 on
                  c.SUPPLIER_INCOTERMS_1_CD = d.INCOTERMS_CD
               WHERE
                  d.PICKUP_ARRIVAL_FLAG='P'  and
                  a.PICKUP_WK_NBR = c.PICKUP_WK_NBR and
                  a.GLOBAL_DUNS_NBR = c.GLOBAL_DUNS_NBR and
                  a.REGION_CD=c.REGION_CD and 
                  c.EXTRA_CALLOFF_FLAG = a.EXTRA_CALLOFF_FLAG and
                  a.SUPPLIER_INCOTERMS_1_CD = c.SUPPLIER_INCOTERMS_1_CD
                 ),0) total_items_ordered
FROM
                GMMT_OWNER.OR_SA_ATTAIN_DTL_T a join GMMT_OWNER.OR_SA_INCOTERMS_T b on
                a.SUPPLIER_INCOTERMS_1_CD = b.INCOTERMS_CD
WHERE
                b.PICKUP_ARRIVAL_FLAG='P' and
                (a.PICKUP_WK_NBR between '201301' AND '201301')  and
                a.SUPPLIER_INCOTERMS_1_CD IN ('EXW')        and 
                a.GLOBAL_DUNS_NBR IN ('43898092') and
                a.REGION_CD IN ('AP')                     
GROUP BY
                PICKUP_WK_NBR,REGION_CD,GLOBAL_DUNS_NBR,GLOBAL_SUPPLIER_NAME,a.EXTRA_CALLOFF_FLAG,a.SUPPLIER_INCOTERMS_1_CD
ORDER BY a.PICKUP_WK_NBR;

它给出了错误的结果。我不确定内表和外表连接之间的NULL是否匹配?

1 个答案:

答案 0 :(得分:0)

正如戈登在评论中所说,你不能把null视为一种价值。

但是,你应该重新考虑加入一个可以为null的列。

听起来你想把它视为一种可能的价值。一种方法是使用nvl()。

以下是一种使连接条件具有值的方法。引号之间的字符串必须在等于的两边相同。

更改

c.EXTRA_CALLOFF_FLAG = a.EXTRA_CALLOFF_FLAG

nvl(c.EXTRA_CALLOFF_FLAG, 'null') = nvl(a.EXTRA_CALLOFF_FLAG, 'null')