我有以下两个 mysql 表。
表名:分析
id execution_time
--- --------------
A1 1
A2 20
A3 35
表名:错误
bug_id creation_time
------ -------------
1000 1.1
1001 1.3
1002 20.2
1003 20.7
1004 20.9
1005 35.1
错误 1000、1001 是为分析 A1 创建的
错误 1002、1003、1004 是为分析 A2 创建的
错误 1005 是为分析 A3 创建的
因此,Bug creation_time 总是大于它的 Analysis 的 execution_time,而 bug_creation_time 总是小于后面分析的执行。
现在,1) 如果我有一个分析 ID,我如何找到相关的错误 (bug_id)。
2)如何找到给定错误数据(id,creation_time)的相关分析id
最佳答案
SELECT b.*, t.*
FROM Bugs b
CROSS JOIN ( SELECT a1.id,
a1.`execution_time` as `start_time`,
a2.`execution_time` as `end_time`
FROM Analysis a1
LEFT JOIN Analysis a2
ON a1.`execution_time` < a2.`execution_time`
WHERE a2.`execution_time` IS NULL
OR a2.`execution_time` = (SELECT min( z.`execution_time`)
FROM Analysis z
WHERE z.`execution_time` > a1.`execution_time`)
) t
WHERE b.`creation_time` between `start_time` and `end_time`
or (b.`creation_time` > `start_time` and `end_time` IS NULL)
输出:只需要按 id 过滤
2)
SELECT *
FROM Analysis a
WHERE a.id = ( SELECT MAX(id)
FROM Analysis a
WHERE a.execution_time < @bugCreationTime)
关于mysql - 如何关联两个未通过键直接连接的mysql表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39598475/