当前位置: 首页 > 面试题库 >

如何从动态查询插入表?

孙风畔
2023-03-14
问题内容

我的Postgres版本是:

“PostgreSQL 9.4.4, compiled by Visual C++ build 1800, 32-bit”
假设我有两个表Table1和Table2,分别具有columncol1和col2。

CREATE TABLE Table1(col1 int);
CREATE TABLE Table2(col2 int);

还有另一个表,Table3用于存储将数据从迁移Table1到的公式Table2:

CREATE TABLE Table3 (     
  tbl_src   varchar(200),
  col_src   varchar(500),
  tbl_des   varchar(200),
  col_des   varchar(100),
  condition varchar(500)
);

INSERT INTO Table3 (tbl_src, col_src, tbl_des, col_des, condition)
SELECT 'Table1','col1','Table2','col2',NULL

如何在动态查询中编译此公式并将其插入目标表?


问题答案:

动态构建命令的基本查询:

SELECT format(‘INSERT INTO %I (%I) SELECT %I FROM %I’
, tbl_des, col_des, col_src, tbl_src) As sql
FROM table3;
这将产生如下查询:

INSERT INTO “Table2” (col2) SELECT col1 FROM “Table1”
请注意引用大写的拼写。与SQL命令不同,在SQL命令中,未加引号的标识符自动折叠为小写字母,而表中的字符串现在区分大小写!

PostgreSQL列名称区分大小写吗?
我建议您不要双引号标识符,而只能使用合法的小写名称。

自动化:

DO
$$BEGIN
   EXECUTE (
      SELECT format('INSERT INTO %I (%I) SELECT %I FROM %I'
                  , tbl_des, col_des, col_src, tbl_src) As sql
      FROM   table3
      -- WHERE table3_id = 123  -- select only *one* row!
      );
END$$;

您需要了解该format()功能。阅读手册。



 类似资料:
  • 问题内容: 与先前 的一对一映射问题 类似,我需要一个针对源和目标中多列的解决方案。 仍可与Postgres 9.4.4一起使用,对查询和架构进行了修改,如下所示: 假设我有这两个表和: 还有另一个表,用于存储将数据从迁移到的公式: 如何在动态查询中编译此公式并将其插入目标表? 问题答案: 动态查询多列语句的基本查询-忽略该列: 结果: 这假定了一个 _ 单一的 源和一个 _ 单一的 目标表。否则

  • 问题内容: 我试图使用临时表开发此存储过程,但是那行不通,所以我改用表变量。我需要对表变量执行临时动态查询,然后使用该表变量执行最终查询。问题是我收到错误消息“必须声明标量变量@clms”。我假设Exec没有该表变量的作用域? 问题答案: 这是简单的最小示例。您可以使用语句。关键是要在动态查询的内部和外部声明表变量。在动态查询结束时,只需从表变量中选择并将结果集插入外部表变量中即可:

  • 我正在做一个自动数据库填充程序,我遇到了一个我无法理解的错误。 我正在开发一个脚本,它应该处理大量文件,包含多个值。文件中的信息具有以下结构: id time_stamp(值1值2值3值4值5)*i(值1值2值3值4值5)*n(值1值2) - I和n (n = nGrupos)是已知的,I从1变化到I,n从1变化到2。每个括号集将被插入到不同的表中,因此有以下5个值。 我遇到麻烦的代码是(我不能让

  • 问题内容: 我有一个动态查询,执行时会给出带有很多列的结果。我想将来自此动态查询的结果插入到临时表中。我这样做是因为我想对临时表执行一些过滤并获得所需的结果。 在该线程中先创建一个临时表,然后使用插入数据。 由于列的列表太长,我想避免此步骤,而且我不知道字段的数据类型。 错误信息 关键字“ exec”附近的语法不正确。 这该怎么做 ?是否可以通过这种方式完成?如果不是,请指定其他替代方法以将执行动

  • 问题内容: 我是mySQL:s联合函数的新手,至少在使用它们进行插入时。根据网上发现的示例,我得到了以下工作: 好的,对此并不奇怪。但是,当我想向数据库中插入与Select的完成逻辑无关的第三个值时会发生什么? 喜欢 : 那怎么办? 问题答案: 您也可以“选择”文字值: 因此,您也可以在和s中使用它。

  • 问题内容: 我正在努力编写一个HQL查询以在表中插入新记录。我已经看到了一些插入查询,如下所示,但我不想从下面的代码插入另一个表中的数据。 例如,我有一个表“ User”,其中有三个字段,例如名称,年龄,数字,并且有该用户表的实体。插入查询将是什么? 问题答案: 在HQL中,仅支持INSERT INTO…SELECT…。没有INSERT INTO…VALUES。HQL仅支持从另一个表插入。 因此可