2016-08-22 100 views
-1

我有以下表格:更新INNER JOIN后

表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 

我用下面的查询,以确定是否CURRENT_TIME两个交易在Table2中,相对于每个唯一ID配对,名称和race_type而言,属于Table1记录的START_TIME和END_TIME。

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; 

我将如何修改此查询到Table2.qualifies参数更新为true或false基于是否有结果返回或不表2中

两个交易

表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 

我猜我需要添加更新与存在的地方?

回答

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。此外,这个答案也显示了正确和更好的数据库结构。

+0

修改数据库不是一个选项。一些建议可以帮助回答原始问题,而不是填补有价值的答案空间。 – user3567212

+0

@sumitbadaya它看起来确实已经回答了问题 - 从OP – Strawberry

+0

的角度来看有点不幸这个问题已经得到解答,但是@ user3567212已经足够盲目地看到它并且选择在非常差的地方编码办法。那么我可怜他手中的项目。大声笑 –