Oracle:是否可以准确地从两个不同的表中连接空字段?

时间:2013-02-12 01:12:05

标签: oracle null left-join nvl

我有四个字段 - itemnum,storeloc,binnum和quantity。

我正在尝试选择前三个字段匹配的数据,但binnum有时为null。当我对数量执行求和时,由于NULL binnum,计算不正确。数据库有一个索引,其中只能有一个itemnum,storeloc和binnum组合,其中binnum可以为NULL。我意识到允许密钥拥有NULL数据是不好的做法,但我无法控制数据的结构。

我尝试过以下where子句:

where nvl(b.binnum,0) = nvl(mu.binnum,0)

where b.binnum is null and mu.binnum is null

两者都不起作用。有什么建议吗?

1 个答案:

答案 0 :(得分:3)

使用NVL加入可能具有NULL值的字段是执行此操作的典型方法。使用这种查询:

WHERE b.itemnum = mu.itemnum
  AND b.storeloc = mu.storeloc
  AND NVL(b.binnum, 0) = NVL(mu.binnum, 0)

假设任何一个表中的binnum0实际上都没有行。如果不是这种情况,则金额将被取消。您将加入binnum 0值,binnum NULLbinnum。需要选择一个默认值进行比较,根据您的域定义,您知道该默认值永远不会存在。即如果NULL0或大于WHERE b.itemnum = mu.itemnum AND b.storeloc = mu.storeloc AND NVL(b.binnum, -1) = NVL(mu.binnum, -1)

{{1}}