我有两个表:table1
,字段为c1
,dt
(可为空); table2
字段为start_dt
,end_dt
和wk_id
。现在,我需要在table1
和table2
之间执行左外连接,以wk_id
dt
,start_dt
和end_dt
之间。我应用了以下条件,但某些不应wk_id
的{{1}}被NULL
拉了NULL
而且有些行会被重复。
where nvl(t1.dt,'x') between nvl(t2.start_dt(+), 'x') and nvl(t2.end_dt(+), 'x');
病情有什么问题?
答案 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')