sql - 如何使用所选值作为 PostgreSQL 中另一个选择的表名

标签 sql postgresql

我有一个包含两个列源名称和输出名称的表:

CREATE TABLE all_table(
  source_name text,
  target_name text
);

源名称它是一些外部数据名称。目标名称是我的数据库中自动生成的表名称。源名称和目标名称之间存在一种关系,每个源名称只有一个目标名称。 我在数据库中有附加表:

CREATE TABLE output_table_1(
  first_name text,
  second_name text,
  birthday timestamp
);

CREATE TABLE output_table_2(
  login text,
  money int
);

在表“all_table”中我有一些行:

|   source_name |    target_name |
|---------------|----------------|
| personal data | output_table_1 |
|    login data | output_table_2 |

我想按源名称从正确的表中选择信息。所以我尝试了

WITH selected_table AS (
  SELECT target_name FROM all_table WHERE source_name='personal data'
)
SELECT * FROM selected_table;

And also

SELECT first_name FROM 
(SELECT target_name FROM all_table WHERE source_name='personal data') AS out_table;

但是 Postgres 只打印正确的目标名称

|    target_name |
|----------------|
| output_table_1 |

我想在我的查询中得到类似的东西

| first_name | second_name | birthday |
|------------|-------------|----------|
|     FName1 |      SName1 |    Date1 |
|     FName2 |      SName2 |    Date2 |
|     FName3 |      SName3 |    Date3 |
|     FName4 |      SName4 |    Date4 |
|        ... |         ... |      ... |

我也尝试过这个查询

DO
$$
BEGIN
  EXECUTE format('SELECT * FROM %s LIMIT 10', (SELECT target_name FROM all_table WHERE source_name='personal data'));
END;
$$ LANGUAGE plpgsql;

执行了查询,但没有发生任何事情。 在谷歌上冲浪并没有做任何有用的事情。但我在这方面很糟糕。

¯\(ツ)

最佳答案

如果要从DO block 中获取数据,需要定义游标进行查询。

do
$$
declare 
    _query text ;
    _cursor CONSTANT refcursor :='_cursor';
begin
    _query:='Select * from '||(Select tab_name from ... where ..);
    open _cursor for execute _query;
end;
$$;
fetch all from _cursor;

关于sql - 如何使用所选值作为 PostgreSQL 中另一个选择的表名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68591213/

相关文章:

sql - 选择仅匹配一个 OR 条件的行

python - 如何注释 Django QuerySet 中两个字段的最大值

sql - 在 Oracle 中部署相同 View 的多个版本

sql - 如何快速删除SQL数据库中的大量记录?

mysql - SQL 加入预先加入的地方

postgresql - 在 Postgres 中,表更改后如何重新验证 ("type-check") 函数和过程?

postgresql - 在 Postgres 中使用 UNION 或 INTERSECT 对具有列的表执行 SQL 重复消除

ruby-on-rails - 我应该在 rails 中为 postgresql 函数创建迁移吗?

sql - SQL Server 中总计的运行摘要

javascript - 使用 Knex 和 PG 插入多行