case
code_oper = 1
then join table2 t on a.id = t.id
else
join table2 t on a.code = t.id
end
?
JOIN всегда выполняется над парой (производных) отношений, поэтому придётся выражать то, что Вам нужно, с учётом этого ограничения. Например, что-то вроде "JOIN (SELECT ... FROM table1 WHERE first_condition UNION ALL SELECT ... FROM table1 WHERE NOT first_condition) AS two_tables ON two_tables.id = outer_table.something", ну и т.п.
1. table2 заверните в подселекты. 2 раза. и фильтруйте как угодно обе версии 2. даже без подселектов можно просто join сделать, два раза. лишь бы ключ был
with table_a as (select 1 as code_oper, 1 as id, 1 as code union all select 2 as code_oper, 2 as id, 2 as code union all select 3 as code_oper, 3 as id, 3 as code ), table2 as (select 1 as id union all select 2 as id) select * from table_a a inner join table2 t on t.id = case when code_oper = 1 then a.id else a.code end
Обсуждают сегодня