我有一个查询,它总是只返回一个元素.我想将此查询的结果附加到一个字符串中,我可以将其用于进一步处理
例
select id from ids where some_condition
我想在字符串中附加此id
喜欢result_(id)_table
,在哪里,id必须用从前一个查询返回的id替换(这是另一个表的本质)
最后,我应该能够执行像这样的查询
select * from result_id_table
Run Code Online (Sandbox Code Playgroud)
其中,"result_id_table"是id被适当替换的表的名称
使用字符串连接:
-- Demo table structure
CREATE TABLE dummy ( id integer primary key, blah integer not null);
INSERT INTO dummy(id, blah) VALUES (1,1);
-- Single-valued query
SELECT id FROM dummy WHERE blah = 1;
-- Formatted with string concatenation
SELECT 'result_'||(id::text)||'_table' FROM dummy WHERE blah = 1;
-- Formatted using the `format` function
SELECT format('result_%s_table', id) FROM dummy WHERE blah = 1;
Run Code Online (Sandbox Code Playgroud)
如果您正在收集其他信息,请使用子查询合并为字符串
SELECT 'result_'||(SELECT id FROM dummy WHERE blah = 1)||'_table'
FROM .... WHERE ...
Run Code Online (Sandbox Code Playgroud)
或使用联接.
您的编辑建议您希望将其用作表名.这可能意味着你的设计很糟糕.代替:
CREATE TABLE sometable_1 ( id integer primary key, ...);
CREATE TABLE sometable_2 ( id integer primary key, ...);
CREATE TABLE sometable_3 ( id integer primary key, ...);
...
CREATE TABLE sometable_n ( id integer primary key, ...);
Run Code Online (Sandbox Code Playgroud)
你几乎总是更好:
CREATE TABLE sometable(
id integer not null,
discriminator integer not null,
primary key (id, discriminator),
...
);
Run Code Online (Sandbox Code Playgroud)
或每个架构表.如果由于某种原因你坚持使用这种方法,你可以使用PL/PgSQL的EXECUTE
语句来运行动态SQL,如:
EXECUTE format('SELECT * FROM sometable_%s WHERE blah = ?',
quote_ident((SELECT id FROM dummy WHERE blah = 1))
)
USING 2;
Run Code Online (Sandbox Code Playgroud)
查询"sometable_1"以查找"blah = 2"的行.手册中的更多信息,请参阅EXECUTE ... USING
.
在PostgreSQL的常规SQL中根本不可能这样做.在应用程序或PL/PgSQL中执行此操作.DO
可以使用PL/PgSQL 块,但如果您依赖于所有内容,性能将会非常糟糕.
现在修复你的设计,为时已晚.
归档时间: |
|
查看次数: |
3975 次 |
最近记录: |