首页 > 解决方案 > 使用 SELECT 结果作为父 SELECT 的列名

问题描述

我有一个 TMP_FOO 表,它具有与 FOO 相同的列以及更多列。我需要将 TMP_FOO 中的所有行插入 FOO。我可以写以下内容:

INSERT INTO FOO (SELECT bar, baz FROM TMP_FOO);

但我需要它是通用的,以便我只更改表的名称。我最好的尝试:

INSERT INTO FOO
(SELECT 
  (SELECT column_name
  FROM USER_TAB_COLUMNS
  WHERE table_name = 'FOO')
FROM
 f2020.TMP_FOO)

哪个不起作用,因为

SELECT column_name
FROM USER_TAB_COLUMNS
WHERE table_name = 'FOO'

返回多行。我可以用纯 SQL 归档我想要的内容(无需动态构建查询字符串)吗?

标签: sqloracleselectsql-insert

解决方案


我可以用纯 SQL 归档我想要的内容(无需动态构建查询字符串)吗?

不。

在纯 SQL 中,您无法从另一个查询生成输出列的列表。数据库在解析查询时(即在查询实际执行之前)需要知道查询将返回哪些列。


推荐阅读