我有一个表,用于存储项目及其相关时间。对于这个问题,以下列是相关的:
CREATE TABLE my_items
(
id INTEGER,
category INTEGER,
t DOUBLE
);
我想选择特定类别(例如 1)中的所有项目以及这些项目的时间在 +- 5(秒)以内的项目集。
我可能会在脚本中使用两种类型的查询来执行此操作:
SELECT id,t from my_items where category=1;
然后循环结果集,使用每个结果行的时间作为 t_q1,并执行单独的查询:
SELECT id from my_items where t >= t_q1-5 AND t <= t_q1+5;
如何在一个查询中完成此操作?
最佳答案
您可以使用联接。获取选择所有类别 1 项目的子查询,并将其与原始表连接,条件是时间在 +/- 5 之内。可能会返回重复的行,因此您可以按 id 分组以避免这种情况:
SELECT t.*
FROM myTable t
JOIN (SELECT id, timeCol FROM myTable WHERE category = 1) t1
ON t.timeCol BETWEEN (t1.timeCol - 5) AND (t1.timeCol + 5)
OR t.id = t1.id
GROUP BY t.id;
我添加了 OR t.id = t1.id
以确保类别 1 的行仍然包含在内。
关于mysql - 在一个查询中从同一个 mysql 表中查找项目和相关项目集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28175242/