Mysql 在内部联接之后更新
我有以下表格: 表1:Mysql 在内部联接之后更新,mysql,group-by,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 20
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中两个事务的当前\u时间是否在表1记录的开始\u时间和结束\u时间内(关于每个唯一的ID配对、名称和种族类型)
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参数,根据Table2中的两个事务是否返回结果,将其设置为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
我猜我需要添加一个更新,并在某处存在?如果您以编程方式插入/更新记录,则应修改数据库结构,并按以下方式执行: 表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
值后,启动更新查询并更新此记录(ID111)current_time列的值
然后使用WHERE
和BETWEEN
子句触发select查询,并根据您的条件,update也限定列值
注意:由于评论部分的字符限制,我将此作为答案发布。所以请不要投反对票。此外,此答案还显示了构造数据库的正确且更好的方法。修改数据库不是一个选项。一些有助于回答原始问题的建议会很好,没有填满有价值的答案空间。@sumitbadaya看起来问题已经被回答了——从OPYes的角度来看这有点不幸。问题已经被回答了,但是@user3567212瞎到可以看到它,并且选择了一种非常糟糕的编码方式。嗯,我很同情他手下的项目。英雄联盟