INNER JOIN后更新

时间:2016-08-22 03:36:32

标签: mysql group-by

我有以下表格:

表1:

id   name    race_type        start_time              end_time
---  ----    ---------        ----------              --------
111  Phelps   Relay       2016-08-20 00:01:00           NULL
111  Phelps   Relay             NULL             2016-08-20 00:02:00
333  Lochte  Butterfly    2016-08-20 00:05:00           NULL
333  Lochte  Butterfly          NULL             2016-08-20 00:06:00

表2:

name      race_type        current_time       qualifies
----      ---------        ------------       ---------
Phelps      Relay       2016-08-20 00:03:30    
Lochte    Butterfly     2016-08-20 00:05:30

我使用以下查询来确定表2中两个事务的CURRENT_TIME是否属于Table1记录的START_TIME和END_TIME,与每个唯一ID配对,名称和race_type有关。

SELECT * FROM (
SELECT id,name,race_type, MIN(start_time) AS start_time, MAX(end_time) AS end_time
FROM Table1
GROUP BY id
) AS results INNER JOIN table2 ON 
  results.name = Table2.name 
  AND results.type = Table2.type 
  AND Table2.current_time BETWEEN results.start_time AND results.end_time;

如何根据表2中的两个事务是否返回结果,修改此查询以将Table2.qualifies参数更新为true或false

修改后,表2应如下所示:

name      race_type        current_time       qualifies
----      ---------        ------------       ---------
Phelps      Relay       2016-08-20 00:03:30       0    
Lochte    Butterfly     2016-08-20 00:05:30       1

我猜我需要在某处添加UPDATE吗?

1 个答案:

答案 0 :(得分:0)

如果以编程方式插入/更新记录,则应修改数据库结构并按以下方式执行:

表1:

id   name    race_type     start_time           end_time   current_time   qualifies
---  ----    ---------     ----------           --------    ----------      ----
111  Phelps   Relay       2016-08-20 00:01:00     NULL        NULL          null

以上将是起点(第一次插入记录时)

然后,在代码中获得current time值后,触发更新查询并更新此记录(id 111)current_time列的值。

然后使用WHEREBETWEEN子句触发选择查询,根据您的条件,更新也会限定列值。

注意:由于评论部分中的字符限制,我将此作为答案发布。所以,请不要downvote。此外,这个答案也显示了构建数据库的正确和更好的方法。