1

我正在尝试获取从 a 获得的值SELECT,然后INSERT将该值与其他值一起放入另一个表中:

WITH data AS (SELECT name FROM programmes WHERE id = $1)
INSERT INTO purchases (name, other_details, some_more_stuff)
VALUES (data.name, $2, $3) FROM data;

但是 PostgreSQL 给出了42601 ERROR: syntax error at or near "FROM" LINE 1: ...(data.name, $2, $3) FROM data.

INSERT文档没有在同一个查询中给出VALUES和一起的任何示例。FROM这种查询的正确语法是什么?或者不可能以这种方式表达我的查询?

4

2 回答 2

4

您不需要公用表表达式。

INSERT INTO purchases (name, other_details, some_more_stuff) 
SELECT name, $2, $3
FROM programmes 
WHERE id = $1

您尝试应用的语法不正确。您不能在 VALUES 列表中使用表或查询中的列,因为该列表必须只包含常量。从文档(强调添加):

VALUES 提供了一种生成“常量表”的方法,该表可以在查询中使用,而无需实际创建和填充磁盘上的表。

另请参见VALUES 语法。

于 2017-03-25T16:09:07.583 回答
3

使用insert . . . select

WITH data AS (
      SELECT name
      FROM programmes 
      WHERE id = $1
    )
INSERT INTO purchases (name, other_details, some_more_stuff) 
    SELECT data.name, $2, $3
    FROM data;

不仅仅是 Postgres。这就是 SQL 的工作原理。老实说,我不认为学习insert . . . values特别有用,因为你可以使用insert . . . select. (好吧,除非您使用不允许“常量”子查询的 MS Access。)

于 2017-03-25T16:03:23.907 回答