有条件的替换和替换

时间:2018-09-21 06:09:49

标签: sql oracle replace case

我有两个要加入的表。

这种情况在表1中默认值为1,然后在表2中默认值为0

Table 1       Table 2
--------     ---------
1            0
1232342      1232342
1241232      1231231

我想将表1和表2连接起来,条件是如果表2为0,那么它将被替换为1。

SELECT T1.ID 
FROM TABLE1 T1, TABLE2 T2
WHERE T1.ID = REPLACE(CASE WHEN T2  = 0 THEN 1 ELSE T2.ID END, 'X', 'E')

使用此语句不会返回其他非0或1的ID

预期产量

Table 1      
--------     
1           
1232342      

4 个答案:

答案 0 :(得分:1)

使用CASE联接。 replace()用于字符串值:

select t1.*
from table1 t1
  join table2 t2 on t1.id = case when t2.id = 0 then 1 else t2.id end;

答案 1 :(得分:0)

尝试在以下情况下使用案例:

SELECT * 
    FROM TABLE1 T1 inner join TABLE2 T2
    on T1.ID = (CASE WHEN T2.ID =0 THEN 1 ELSE T2.ID END)

答案 2 :(得分:0)

用例when和子查询

select t1.* from table1 t1 join    
(
select case when t2.id=0 then 1 else t2.id end as id  from table2 t2
) as t3 on t1.id=t3.id

答案 3 :(得分:0)

切换到现代的显式JOIN语法。跳过case表达式,只需使用AND / OR即可:

SELECT T1.ID 
FROM TABLE1 T1
JOIN TABLE2 T2
    ON T1.ID = T2.ID OR (T1.ID = 1 and T2.ID = 0) 

或使用INTERSECT

SELECT ID FROM TABLE1
INTERSECT
SELECT case when ID = 0 then 1 else id end from TABLE2