You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL中如何用单个查询实现从表A获取列名并查询表B数据

合并PostgreSQL查询实现动态列选择

要把获取列列表和查询表B这两步合并成单个PostgreSQL查询,需要用到动态SQL,通过字符串拼接生成查询语句并执行。具体实现如下:

DO $$
DECLARE
    col_list text;
BEGIN
    -- 从表A的列B中获取所有列名,拼接成逗号分隔的字符串
    SELECT string_agg(quote_ident("列B"), ', ') INTO col_list
    FROM "表A";

    -- 执行动态生成的查询
    EXECUTE format('SELECT %s FROM "表B"', col_list);
END $$;

说明

  • string_agg(quote_ident("列B"), ', '):把表A列B中的每个值用quote_ident处理(避免列名包含特殊字符或关键字导致语法错误),再拼接成逗号分隔的列名字符串。
  • EXECUTE format(...):用format函数安全构造查询语句,然后执行动态SQL。

如果需要将查询结果直接返回(而非仅在PL/pgSQL块中执行),可以创建函数实现:

CREATE OR REPLACE FUNCTION get_dynamic_columns()
RETURNS SETOF record AS $$
DECLARE
    col_list text;
BEGIN
    SELECT string_agg(quote_ident("列B"), ', ') INTO col_list
    FROM "表A";

    RETURN QUERY EXECUTE format('SELECT %s FROM "表B"', col_list);
END $$ LANGUAGE plpgsql;

-- 调用时需指定返回结构
SELECT * FROM get_dynamic_columns() AS ("Col_name 1" text, "Col_name 2" text);

内容的提问来源于stack exchange,提问作者Vishnu Cealian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 04:40:53