[英]Select rows from all tables containing specific column
我有几个表有一个名为something
的列。
如何选择的列中的所有行something
从具有这样的列的所有表?
可以在一个查询中完成吗?
方法是创建动态脚本:
SELECT 'SELECT something FROM ' || table_name ||';'
FROM information_schema.columns
WHERE column_name = 'something'
然后运行生成的脚本的输出。 如果您担心模式名称,列类型,联合等,请相应地修改动态sql生成。
是的,可以使用UNION运算符使用SQL查询来完成。
https://www.postgresql.org/docs/8.3/static/queries-union.html
SELECT something FROM table_a UNION
SELECT something FROM table_b
我希望它有所帮助。
begin;
do $$
declare
stmt text;
tbls text[];
col text := 'x';
begin
select
array_agg(format(
'select ''%2$s.%3$s'' as tbl, %1$I::text from %2$I.%3$I',
col, table_schema, table_name))
into tbls
from information_schema.columns
where column_name = col;
raise info '%', tbls;
stmt := array_to_string(tbls, ' union all ');
raise info '%', stmt;
execute 'declare foo cursor for ' || stmt;
end $$;
fetch all from foo;
rollback;
结果是(对于我的测试数据库):
INFO: {"select 'public.dummy' as tbl, x::text from public.dummy","select 'nd.t' as tbl, x::text from nd.t"}
INFO: select 'public.dummy' as tbl, x::text from public.dummy union all select 'nd.t' as tbl, x::text from nd.t
╔══════════════╤═══╗
║ tbl │ x ║
╠══════════════╪═══╣
║ public.dummy │ X ║
║ nd.t │ 3 ║
╚══════════════╧═══╝
(2 rows)
它应该在单个事务中执行( begin; ... rollback;
),因为declare ...
语句创建的游标只存在于事务中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.