我有两个要加入的表。
这种情况在表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
答案 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