从表2更新表1

时间:2017-08-28 08:33:29

标签: php mysql

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

表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 endtime插入Table 1上的 Ausloesungsart.UNDEFINED= \= Unbekannt Ausloesungsart.FIS=0 \= FIS Ausloesungsart.MANUELL=1 \= Manuell

2 个答案:

答案 0 :(得分:0)

您可以在UPDATE查询中加入这两个表格(在documantation中阅读相关内容):

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

答案 1 :(得分:-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语法。虽然您可能永远不会移植您的代码,但您至少可以将您的技能移植到多个数据库(这通常是一件很酷的事情,以避免成为一个单一的小马)。