Выберите из разных таблиц в зависимости от условия - PullRequest
0 голосов
/ 13 марта 2019

Я бы хотел выбрать из разных таблиц на основе параметра, возможно ли это сделать? Обе таблицы имеют совместимую структуру.

select * from
  (
    case when p_target then
      select * from table_a
    else
      select * from table_b
    end
  );

Ответы [ 2 ]

1 голос
/ 13 марта 2019

Хотя это совсем не лучшая практика, и вы должны действительно взглянуть на свою модель данных, вот способ сделать это:

with table_a as (
select 1::int, 'a'::text param
), table_b as (
select 2::int, 'b'::text param
)
select *
from (
    select *
    from table_a
    union all
    select *
    from table_b
) rs
where param = 'a'

Просто добавьте столбец параметров во все таблицы, объединениеих, а затем их все в подзапросе, из которого вы можете выбрать параметр конкретной таблицы.

0 голосов
/ 14 марта 2019

Ответ Георгия наилучшим образом решает вопрос, который я задал, поэтому для будущих читателей это может быть правильным ответом.

Однако для моей ситуации я использовал другой подход, я инкапсулировал эту функцию обмена таблицами в процедуру, которая выглядит следующим образом:

create function table_swap(p_target character varying)
  returns TABLE(id int)
language plpgsql
as $$
begin     
case
  when p_target = 'a' then
    return query
      select * from table_a;

  when p_target = 'b' then
    return query
      select * from table_b;

  else
    return;
 end case;

, которая затем позволила мне сделать следующее

select * from table_swap(p_target);
...