首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何基于大容量选择插入大容量数据

如何基于大容量选择插入大容量数据
EN

Stack Overflow用户
提问于 2016-04-27 18:32:30
回答 3查看 68关注 0票数 0

我有以下表格:

代码语言:javascript
复制
table1
========
rpid  | fname | lname  | tu  |  fu  |  tu_id   |  start_time    


table2
========
tu_id  | tu | fu   |  start_time  

我想使用tu_id中的匹配记录填充表1的tu、fu和table2。我是根据时间戳来匹配的。

代码语言:javascript
复制
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

我也试过这样做:

代码语言:javascript
复制
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
);

这就给出了语法错误:

代码语言:javascript
复制
ERROR:  syntax error at or near ","
LINE 1: UPDATE table1 SET  tu_id, fu, tu  FROM ( SELECT table2.t...
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-04-27 19:01:16

代码语言:javascript
复制
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 
;
票数 1
EN

Stack Overflow用户

发布于 2016-04-27 18:55:25

在postgres 9.5 (最后一个稳定版本)之前,不能只使用一个选择更新多个列。

因此,语法将类似于:

9.5之前:

代码语言:javascript
复制
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+:

代码语言:javascript
复制
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
);

编辑:我忘了更新..。感谢其他回复者在我的记忆中刷新了这些!

票数 0
EN

Stack Overflow用户

发布于 2016-04-27 19:01:48

我相信这是最简单的方法:

代码语言:javascript
复制
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;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36898115

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档