【发布时间】:2017-03-18 15:23:01
【问题描述】:
我正在使用 PostgreSQL,我的 sql 结构:
CREATE TEMP TABLE users (
id_user serial,
user_name varchar,
id_user_description int
);
CREATE TEMP TABLE user_description (
id_user_description serial,
age int
);
users 表有一些用户:
INSERT INTO users (user_name)
SELECT column1
FROM (
VALUES
('John'),
('Amanda')
) t;
我正在尝试将数据插入表 user_description,并且我还需要将插入的行 ID 更新到表 users。我的查询是这样的:
WITH inserted_user_description AS (
INSERT INTO user_description (age)
SELECT age
FROM (
SELECT users.id_user,
t.column1 AS age,
t.column2 AS user_name
FROM (
VALUES
(21, 'John'),
(28, 'Amanda')
) t
INNER JOIN users ON users.user_name = t.column2
) tt
RETURNING id_user_description, tt.id_user
)
UPDATE users SET id_user_description = t.id_user_description
FROM (
SELECT id_user_description, id_user
FROM inserted_user_description
) t
WHERE users.id_user = t.id_user;
但我得到错误:
错误:表“tt”缺少 FROM 子句条目 第 15 行:返回 id_user_description、tt.id_user
我该如何解决这个问题?
【问题讨论】:
-
错误信息与贴出的代码不符
-
什么意思?为什么不?当然,您应该删除 <...> 我删除了更多列的地方
-
如果需要帮助,请输入原始sql和错误
-
我添加了具体的案例和结构
-
“可选的 RETURNING 子句导致 INSERT 根据实际插入的每一行计算并返回值”postgresql.org/docs/9.5/sql-insert.html
tt.id_user不存在于插入的行中。
标签: sql postgresql