sql - 通过 : more target columns than expressions error 插入一个选择组

标签 sql postgresql select group-by insert

<分区>

我有一个查询,我想做,它是一个 SELECT GROUP BY 的 INSERT,但我收到错误:

ERROR: INSERT has more target columns than expressions
LINE 15: INSERT INTO "KPI_MEASURE" (id, created_at, kpi_project_id, k...
_____________________________________^
HINT: The insertion source is a row expression containing the same number of columns expected by the INSERT. Did you accidentally use extra parentheses?

我搜索了这个错误,但我发现,如果行数不匹配,就会发生这个错误,但对于下面的查询,行数相同。
Postgres SQL 查询:

INSERT INTO "KPI_MEASURE" (
        id,
        created_at,
        kpi_project_id,
        kpi_frequency_id,
        kpi_metric_id,
        branch,
        value
    )
SELECT (
        nextval('"KPI_MEASURE_ID_seq"'::regclass),
        now(),
        kpi_project.id,
        kpi_measure.kpi_frequency_id,
        kpi_metric.id ,
        kpi_measure.branch ,
        sum(kpi_measure.value)
    )
FROM "KPI_MEASURE" kpi_measure
    INNER JOIN "KPI_METRIC" kpi_metric                      ON kpi_measure.kpi_metric_id = kpi_metric.id
    INNER JOIN "KPI_PROJECT" kpi_project                    ON kpi_measure.kpi_project_id = kpi_project.id
    INNER JOIN "KPI_AGGREGATION_PROJECT" kpi_agg_project    ON kpi_project.name = kpi_agg_project.child_project_name
    WHERE kpi_metric.aggregated = false
GROUP BY kpi_measure.branch, kpi_metric.id, kpi_project.id, kpi_project.name, kpi_frequency_id;

最佳答案

当您将表达式括在括号中时,Postgres 将结果解释为元组——本质上是一个结构或记录。

所以,你的声明:

SELECT (
        nextval('"KPI_MEASURE_ID_seq"'::regclass),
        now(),
        kpi_project.id,
        kpi_measure.kpi_frequency_id,
        kpi_metric.id ,
        kpi_measure.branch ,
        sum(kpi_measure.value)
     )

返回一个值。该值是一个记录。

不支持元组的数据库会返回错误。

解决方案是去掉括号。

关于sql - 通过 : more target columns than expressions error 插入一个选择组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57993010/

相关文章:

sql - Postgres 截断 CASE 语句列

python - 如何使用python连接postgres

php - 如何使用组合框(选择)值重新加载页面?

php - 当使用 PHP 代码填充选择函数时,HTML 表单丢失函数

javascript - 当我使用 D3 将鼠标悬停在第二个 SVG 的元素上时如何更改 SVG 中元素的属性

sql - 将 get_absolute_url 组合成 django 中的原始 SQL 语句

java - 在java中缓存sql结果集

postgresql - 在windows postgresql中生成uuid

php - 查询在 999 个字符处被截断

sql - 通过SSH/Qshell的SQL命令