【问题标题】:INSERT INTO with SELECT (only subset of columns and column ordering)INSERT INTO with SELECT(仅列的子集和列排序)
【发布时间】:2020-08-20 09:31:38
【问题描述】:

问题:我想将dummy_data_temp 中存在(但不存在)的行插入dummy_datadummy_data 由 10 列组成,dummy_data_temp 仅包含这些列的子集(4 列,这 4 列在 dummy_data 中的列索引为 2、6、9、10)。为此,我使用下面的查询

运行此命令时出现以下错误:

警告:postgresqlExecStatement 中的错误:RS-DBI 驱动程序:(无法检索结果:错误:列“XXX”是双精度类型,但表达式是文本类型

LINE 1: INSERT INTO dummy_data SELECT dummy_data_temp.* FROM dummy_d...
                                      ^
HINT:  You will need to rewrite or cast the expression.`

问题:有没有办法通过名称引用插入选定的列,或者dummy_data_temp 必须始终包含与dummy_data 相同的列(和列顺序)?

INSERT INTO dummy_data 
SELECT dummy_data_temp.* 
FROM dummy_data_temp 
LEFT OUTER JOIN dummy_data ON (dummy_data.id=dummy_data_temp.id) 
WHERE (dummy_data.id IS NULL)

【问题讨论】:

  • 是的,您需要列出所有列。

标签: postgresql sql-insert


【解决方案1】:

只需指定目标列和源列:

INSERT INTO dummy_data (column_2, column_6, column_9, column_10)
SELECT t.col4, t.col2, t.col1, c.col3
FROM dummy_data_temp t
  LEFT OUTER JOIN dummy_data dd ON dd.id = t.id
WHERE dd.id IS NULL;

(不过,A NOT EXISTS 条件可能更有效)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-14
    • 2011-07-12
    相关资源
    最近更新 更多