在连接条件(Oracle)之间的可空字段上的左外连接

时间:2012-08-31 04:01:31

标签: oracle left-join between

我有两个表:table1,字段为c1dt(可为空); table2字段为start_dtend_dtwk_id。现在,我需要在table1table2之间执行左外连接,以wk_id dtstart_dtend_dt之间。我应用了以下条件,但某些不应wk_id的{​​{1}}被NULL拉了NULL而且有些行会被重复。

where nvl(t1.dt,'x') between nvl(t2.start_dt(+), 'x') and nvl(t2.end_dt(+), 'x');

病情有什么问题?

2 个答案:

答案 0 :(得分:1)

select *
from table1 t1
left join table2 t2
    on t1.dt between t2.start_dt and t2.end_dt

我建议您尝试新的ANSI连接语法。

另外,您是否只使用'x'作为示例?或者dt列是否真的存储为字符串?

答案 1 :(得分:0)

您似乎错过了“ table1左外连接table2 on table1.some_field = table2.some_field

的部分

这样的事情:

select t1.c1, t1.dt, t2.start_dt, t2.end_dt, t2.wk_id
from table1 t1 left outer join table2 t2
on t1.some_field1 = t2.some_field1
where nvl(t1.dt,'x') 
between nvl(t2.start_dt, 'x') and 
nvl(t2.end_dt, 'x')