2017-08-28 74 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語法。雖然你可能永遠不會移植你的代碼,但你至少可以將你的技能移植到多個數據庫中(這通常是一件很酷的事情,以避免成爲一個小把戲)。