根据条件从不同的表中选择

时间:2019-03-13 12:55:19

标签: postgresql plpgsql

我想根据一个参数从不同的表中进行选择,这可能吗?这两个表都具有兼容的结构。

{1}, {1, 2, 5}, {3, 4}

2 个答案:

答案 0 :(得分:1)

尽管这根本不是最佳实践,并且您应该真正查看数据模型,但这是一种实现方法:

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'

只需在所有表中添加一个参数列,将它们合并,然后将它们全部放在一个子查询中,就可以从中选择特定表的参数。

答案 1 :(得分:0)

Georgi的答案可以最好地解决我提出的问题,因此对于将来的读者来说,这可能是正确的答案。

但是对于我所处的情况,我采取了另一种方法,我将该表交换功能封装到一个如下所示的过程中:

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);