Условное соединение с заменой и регистром - PullRequest
0 голосов
/ 21 сентября 2018

У меня есть две таблицы, к которым я хочу присоединиться.

Случай в таблице 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

ожидаемый результат

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

Ответы [ 4 ]

0 голосов
/ 21 сентября 2018

Переключиться на современный, явный синтаксис 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
0 голосов
/ 21 сентября 2018

Попробуйте использовать случай, когда:

SELECT * 
    FROM TABLE1 T1 inner join TABLE2 T2
    on T1.ID = (CASE WHEN T2.ID =0 THEN 1 ELSE T2.ID END)
0 голосов
/ 21 сентября 2018

вариант использования, когда и подзапрос

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
0 голосов
/ 21 сентября 2018

Используйте объединение с CASE.replace() для строковых значений:

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