mysql - 如何关联两个未通过键直接连接的mysql表

标签 mysql

我有以下两个 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

最佳答案

1) SQL FIDDLE DEMO

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 过滤

enter image description here

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/

相关文章:

mysql - SQLite (Ionic 2) 行中的重复值

JavaScript $.GET 未通过

mysql - 在codeigniter中将图像上传到数据库?

mysql - 如何绕过 'ON DELETE SET DEFAULT' 不被接受?

mysql - 我应该将 EAV 值放入数据类型表中吗?

mysql - 在 MySQL 中存储持续时间

mysql - SQL根据列之间交换的两个键查找重复记录

php - 无法用php连接数据库

python - 如何在 MySQL 中查找重复项

php - 插入两行时 stmt->execute 不起作用