2017-08-28 75 views
-2

我在我的数据库中有两个表,我想从Table 2更新表1从表2

表1更新Table 1看起来是这样的:

id - eventid - hostname - trigger - startime  - endtime 
1  00001 - 10.10.10.1 - PROB - 2017-08-03 18:33 ? 
2  00001 - 10.10.10.1 - PROB - 2017-08-05 00:33 ? 
3  00001 - 10.10.10.1 - PROB - 2017-08-05 00:32 ? 
4  00002 - 10.10.10.2 - PROB - 2017-08-02 14:58 ? 
5  00002 - 10.10.10.2 - PROB - 2017-08-07 17:59 ? 
. 
. 

和表2是这样的:

id - eventid - hostname - trigger - startime  
1  00001 - 10.10.10.1 - OK - 2017-08-03 19:22 
2  00001 - 10.10.10.1 - OK - 2017-08-05 03:13 
3  00001 - 10.10.10.1 - OK - 2017-08-05 04:30 
4  00002 - 10.10.10.2 - OK - 2017-08-02 15:08 
5  00002 - 10.10.10.2 - OK - 2017-08-07 19:29 
. 
. 

如何更新Table 1以便我可以将startimeTable 2插入endtimeTable 1

+1

阅读关于更新加入 – Jens

回答

0

你可以加入你的UPDATE查询两个表(在documantation读到它):

UPDATE `Table 1` t1 
    JOIN `Table 2` t2 ON t1.ID = t2.ID 
SET t1.endtime = t2.starttime 
+0

其实这两个表的id是不同的,只有eventid是相同的,我使用这个命令,但它保持只插入第一个匹配表格table2所有其余的我的意思是这个id - eventid - hostname - trigger - startime - endtime 1 00001 - 10.10.10.1 - PROB - 2017-08-03 18:33 2017-08-03 19:22 2 00001 - 10.10.10.1 - PROB - 2017-08-05 00: 33 2017-08-03 19:22 3 00001 - 10.10.10.1 - PROB - 2017-08-05 00:32 2017-08-03 19:22 – wael

+0

@wael:如果ID不同,那么你怎么能确定哪个endtime应该插入表1中的哪一行? – waka

+0

我明白....感谢提示 – wael

-1

相同的查询。不同的连接语法。

第一种是旧式ANSI,后者是后来的ANSI。如果你必须在他们之间选择,选择后者。

由于USING的限制(不能使用别名),我不会使用它们中的任何一个。而是写为:

UPDATE table1 A 
INNER JOIN (SELECT id,COUNT(*) idcount FROM table2 GROUP BY id) as B 
    ON B.id = A.id 
SET A.Freq = B.idcount 
See this Oracle answer as to why USING is not to be preferred: https://stackoverflow.com/questions/456684/mixing-using-and-on-in-oracle-ansi-join 

而且here是SQL Server类似的讨论:

一般来说,习惯的方式,是便携式书写SQL语法。虽然你可能永远不会移植你的代码,但你至少可以将你的技能移植到多个数据库中(这通常是一件很酷的事情,以避免成为一个小把戏)。