我有以下表格:
table1
========
rpid | fname | lname | tu | fu | tu_id | start_time
table2
========
tu_id | tu | fu | start_time 我想使用tu_id中的匹配记录填充表1的tu、fu和table2。我是根据时间戳来匹配的。
UPDATE table1
INNER JOIN table1
ON date_trunc('hour', table1.start_time) date_trunc('hour', table2.start_time) AND table1.rpid=table2.tu
SET table1.tu_id= table2.tu_id, table1.fu = table2.fu, table1.tu=table2.tu;我现在收到一个语法错误,如下所示:
错误:语法错误在或接近“内部”第1行:更新table1内部连接table1 on date_trunc('hour',table1.s.)
我以前从没试过这样的东西,所以我肯定我错过了一些显而易见的东西。有什么建议吗?
我知道内部联接本身是正确的,因为我首先在SELECT语句中尝试了它。它会返回我想要的数据..。现在我只是更新table1中的字段。谢谢。
编辑1
我也试过这样做:
UPDATE table1
SET tu_id, fu, tu FROM (
SELECT table2.tu_id, table2.fu, table2.tu
FROM table1, INNER JOIN table1 on date_trunc('hour', table1.start_time) = date_trunc('hour', table2.start_time) AND table1.rpid=table2.tu
);这就给出了语法错误:
ERROR: syntax error at or near ","
LINE 1: UPDATE table1 SET tu_id, fu, tu FROM ( SELECT table2.t...发布于 2016-04-27 19:01:16
UPDATE table1 SET tu_id= table2.tu_id, fu = table2.fu, tu=table2.tu
from table2
where
date_trunc('hour', table1.start_time) = date_trunc('hour', table2.start_time) and table1.rpid=table2.tu
;发布于 2016-04-27 18:55:25
在postgres 9.5 (最后一个稳定版本)之前,不能只使用一个选择更新多个列。
因此,语法将类似于:
9.5之前:
UPDATE table1
SET tu_id = (SELECT table2.tu_id
FROM table1
INNER JOIN table2
ON date_trunc('hour', table1.start_time) = date_trunc('hour', table2.start_time)
AND table1.rpid=table2.tu),
fu = (SELECT table2.fu
FROM table1
INNER JOIN table2
ON date_trunc('hour', table1.start_time) = date_trunc('hour', table2.start_time)
AND table1.rpid=table2.tu),
tu = (SELECT table2.tu
FROM table1
INNER JOIN table2
ON date_trunc('hour', table1.start_time) = date_trunc('hour', table2.start_time)
AND table1.rpid=table2.tu);和9.5+:
UPDATE table1
SET (tu_id, fu, tu) = (
SELECT table2.tu_id, table2.fu, table2.tu
FROM table1
INNER JOIN table2
ON date_trunc('hour', table1.start_time) = date_trunc('hour', table2.start_time)
AND table1.rpid=table2.tu
);编辑:我忘了更新..。感谢其他回复者在我的记忆中刷新了这些!
发布于 2016-04-27 19:01:48
我相信这是最简单的方法:
UPDATE table1 t
SET tu_id = t2.tu_id,
fu = t2.fu,
tu = t2.tu
FROM table2 t2
WHERE date_trunc('hour', t.start_time) = date_trunc('hour', t2.start_time)
AND t.rpid=t2.tu;https://stackoverflow.com/questions/36898115
复制相似问题