2012-06-01 2 views
1

У меня возникла ситуация, когда мне нужно было бы выполнить условное соединение на основе значения столбцов в одной из таблиц.Sybase - Conditional Join on Columns на основе значения одного столбца

table_a ta

    join table_b tb on
    case
     when ta.column_1 = 1 then ta.column_2 = tb.column_2
     when ta.column_1 = 2 then ta.column_2 = tb.column_2 and ta.column_3 = tb.column_3
     when ta.column_1 = 3 then ta.column_2 = tb.column_2 and ta.column_3 = tb.column_3 and ta.column_4 = tb.column_4
    end

Пожалуйста, посоветуйте, как я должен идти об этом?

Пробовал поиск и получил несколько вариантов использования left join, но я не уверен, как это сделать. :(

Пожалуйста посоветуйте

ответ

0

я думаю, все это может быть сформулирована в виде единого boelean выражения

... 
join table_b tb on 
(ta.column_1 = 1 and ta.column_2 = tb.column_2) or 
(ta.column_1 = 2 and ta.column_2 = tb.column_2 and ta.column_3 = tb.column_3) 
... 
+0

Очень элегантное решение. Благодаря тонну. –

0

Вы можете использовать left joins и поставить case expression при выборе столбцов:.

select 
    case when ta.column_1 = 1 then b1.column 
    case when ta.column_1 = 2 then b2.column 
    case when ta.column_1 = 3 then b3.column 
    end 
from table_a ta 
left join table_b b1 on ta.column_2 = tb.column_2 
left join table_b b2 on ta.column_2 = tb.column_2 and ta.column_3 = tb.column_3 
left join table_b b3 on ta.column_2 = tb.column_2 and ta.column_3 = tb.column_3 and ta.column_4 = tb.column_4 
0

Попробуйте объединение

select * from tbla ta, tblb tb 
where ta.column_1 = 1 
    and ta.column_2 = tb.column_2 
union 
select * from tbla ta, tblb tb 
where ta.column_1 = 2 
    and ta.column_2 = tb.column_2 
    and ta.column_3 = tb.column_3 
union 
select * from tbla ta, tblb tb 
where ta.column_1 = 3 
    and ta.column_2 = tb.column_2 
    and ta.column_3 = tb.column_3 
    and ta.column_4 = tb.column_4 

tada

Смежные вопросы