更新表1从表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
以便我可以将startime
从Table 2
插入endtime
Table 1
?
你可以加入你的UPDATE
查询两个表(在documantation读到它):
UPDATE `Table 1` t1
JOIN `Table 2` t2 ON t1.ID = t2.ID
SET t1.endtime = t2.starttime
其实这两个表的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
@wael:如果ID不同,那么你怎么能确定哪个endtime应该插入表1中的哪一行? – waka
我明白....感谢提示 – wael
相同的查询。不同的连接语法。
第一种是旧式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语法。虽然你可能永远不会移植你的代码,但你至少可以将你的技能移植到多个数据库中(这通常是一件很酷的事情,以避免成为一个小把戏)。
阅读关于更新加入 – Jens