【发布时间】:2012-09-12 08:56:09
【问题描述】:
我看到这个问题有很多变体,但在询问比较空值时,它们似乎都在谈论性能和索引。
我的问题是我有一个嵌套的 SELECT,它可以返回我根据日期参数比较的 null。
SELECT a.*
FROM Table_One a,
Table_Two b
WHERE a.Fieldc IN (SELECT CompareValue from Table_Three cv WHERE inDate between cv.Date_ and SYSDATE)
AND a.Fielda = b.Fieldb(+)
似乎当这里的嵌套选择返回 null 时,左连接就搞砸了。
如果需要,我很乐意提供一些虚假数据,但也许我只是遗漏了一些东西。 我需要发生的是 Fieldc 比较只发生在该日期规范内。
感谢您的任何见解。 谢谢。
更多信息:
Table_One 数据:所有字段都是 varchar2
Fielda | Fieldb | Fieldc|
'aVal' | 'bVal' | 'cVal'|
'dVal' | 'eVal | 'fVal'|
'dVal' | 'fVal | 'eVal'|
Table_Two 数据:所有字段都是 varchar2
Fielda | Fieldb | Fieldc|
'aVal' | 'bVal' | 'cVal'|
'dVal' | 'fVal | 'gVal'|
'dVal' | 'fVal | 'cVal'|
Table_Three 数据:CompareValue 为 varchar2,date_ 为 date
CompareValue | date_ |
'fval' | 2012-09-10 |
因此,如果参数是今天,则选择返回 'fval' 并且我们正确地得到了左连接。但是,当日期参数在 '2012-09-10' 之前,则嵌套选择正在比较 null 并且左连接不会正确发生。这是原版的简化版。
谢谢
【问题讨论】:
-
当值为空或不匹配时,你希望它匹配吗?
-
从查询中我不清楚为什么需要左外连接。
-
与您的问题无关,但尽管如此:不要将
(+)运算符用于外部连接。使用正确的LEFT JOIN语法。 -
左连接“搞砸了”并不是非常有用。这到底是什么意思呢?错误代码?如果子查询返回null,你想发生什么?
标签: sql oracle null where-clause