我只是在学习CTE,我想在WITH子句中创建动态查询。
以下是我编写的代码。
WITH name1 AS (
SELECT schema_name as my_schema
FROM public.schema_table
), name2 AS (
SELECT num_rows as my_row
FROM my_schema.row_table
)
SELECT my_row
from name2;
从WITH内部的第一个查询中,一个数据库中存在一个模式,而该模式名称由
返回SELECT schema_name as my_schema
FROM public.schema_table
我想在第二个查询中使用,因为我将其保存到my_schema。
但是当我运行此查询时,它会给我一些错误,例如my_schema不存在,因为我想使用my_schema包含的值。
你怎么能这样做?
答案 0 :(得分:3)
首先,您似乎没有在查询中的任何位置使用name1
,因此我怀疑您可能没有完全理解WITH
。
然而,看起来您可能有多个名为row_table
的表,每个表都存在于自己的架构中,并希望创建一个查询,让您选择要从哪个架构中获取。
FROM my_schema.row_table
^^^^^^^^^
my_schema
不是变量,它是架构的名称。要执行您想要的操作,您将不得不使用pg_catalog表来查找所需模式中关系的oid
,并以这种方式查找信息。
另一种解决方案可能是操纵搜索路径进行出价:
BEGIN;
SET LOCAL SCHEMA 'my_schema';
SELECT num_rows FROM row_table; -- will use my_schema.
COMMIT;