【发布时间】:2021-04-23 15:23:05
【问题描述】:
我正在尝试通过连接两个表来创建视图。这两个表有几个同名的列。这给出了一个错误
SQL 错误 [42701]:错误:列“column_name”指定了多次
在创建视图时我不能使用列名,因为有 30 多个列,并且新列将在一段时间内添加到两个表中。因此,我必须使用 * 来获取所有列。
现在,为了消除两个表中都存在的列,我继续这样做:
SELECT 'SELECT ' || STRING_AGG('u2.' || column_name, ', ') || ' FROM schema_name.table_name u2'
FROM information_schema.columns
WHERE table_name = 'table_name'
AND table_schema = 'schema_name'
AND column_name NOT IN ('column_name');
这给了我从schema_name.table_name 中选择数据的查询,而没有列column_name。太好了!!
问题:如何执行上述查询的结果?
我试过PREPARE语句,它只是执行上面的查询,而不是上面查询的结果。
另外,创建一个没有“column_name”列的临时表不是一个可行的解决方案。
【问题讨论】:
-
在
psql中,您可以使用\gexec元命令运行它。 -
@a_horse_with_no_name,在执行完这个查询后,我必须将结果与另一个表连接起来创建一个视图
-
你需要使用 PL/pgSQL 和dynamic SQL
-
@TridevChaudhary 检查我的答案。我还在回答中提供了一个 db fiddle (DEMO)。您可能需要根据您的表名修改查询。
标签: sql postgresql