我有一个包含两个列源名称和输出名称的表:
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/