我在加入时遇到麻烦。由于我正在执行相当大的过程(超过1000行),因此必须进行大量的CTE和联接。但是,这对我来说似乎很简单,但是现在我被卡住了。
我想加入一个表,但只能在
的字段上Status_time < x_date
)之前变成该状态时这意味着在某些情况下,我想要在state=1
所在的行,因为state=1
是在x_date
之后设置的。
我认为使用保护套会降低性能,使之不再可行。但我愿意接受任何建议。
这是我尝试首先加入的示例(更大,但是我删除了与该问题无关的部分)
Left join contracts con4
on con4.owner_id = cu.cust_id
and.......some condition
and.......some condition
and (con4.contract_status != 1 and con4.status_time < cr.x_date)
示例代码
下面的代码尝试与上面的代码相同。我想加入,因为只有其中一个条件成立,而并非两个都成立。 (状态= 1且b.status_time with sample_t as(
select '123' cust_id, '' contract_status, sysdate x_date from dual),
contract as(select '1' contract_status, '123' cust_id, sysdate+1 status_time from dual)
select * from sample_t a
left join contract b
on a.cust_id = b.cust_id
and (b.contract_status != '1' and b.status_time < x_date)
答案 0 :(得分:0)
这符合您的要求吗?
and (con4.contract_status != 1 and con4.status_time < cr.x_date
or con4.contract_status = 1 and con4.status_time > cr.x_date)
您尚未说明con4.status_time = cr.x_date时会发生什么。