mysql - MySQL Inner Join 范围查询困难

标签 mysql sql

我真的在为一个 MySQL 查询而苦苦挣扎,我真的希望有人能帮助我。我在 MySQL 数据库中有三个表 - 表 A、B 和 C。我想从表 A 的第 1 列 (a.1) 中找到与表 B 的第 2 列 (b.2) 中的值匹配的所有值。然后对于每个 b.2 匹配项,在表 B 中找到所有其他 b.2 值,这些值在 b.3 中找到的整数值的 +/- 100 范围内,其中 a.1 与 b.2 匹配。最后,我需要获取这些 b.2 值并在表 C 的第 4 列中找到匹配的 b.2 值。

这是我尝试执行查询的方式:

SELECT * 
FROM TableB AS b 
INNER JOIN TableA AS a ON b.2 = a.1 
AND b.3 >= (b.3 - 100) 
AND b.3 <= (b.3 + 100) 
INNER JOIN TableC as c 
ON b.2 = c.4;

我试图用一张图片来说明我想做什么,希望这对您有所帮助。 enter image description here

最佳答案

根据您的描述,我提炼出了这个查询:

SELECT a.one, b.three, c.four
FROM   a
JOIN   b AS b0 ON b0.two = a.one             -- intermediary step
JOIN   b ON b.three BETWEEN b0.three - 100 
                        AND b0.three + 100   -- real b values
JOIN   c ON c.four = b.two

我在您的查询中看到的问题:

  • 你有 WHERE a.1 = b.2 它应该是 ON a.1 = b.2
  • 在最后的 JOIN 中,您有 ON bb.3 = c.4,而根据您的描述,它必须为 ON bb.2 = c.4
  • 如果您的描述有误而您的演示是正确的,那么我们可以简化为:

SELECT a.one, b.three, c.four
FROM   a
JOIN   b ON b.two = a.one
JOIN   c ON c.four BETWEEN b.three - 100 AND b.three + 100

关于mysql - MySQL Inner Join 范围查询困难,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8288265/

相关文章:

mysql - 使用 Count、filter 和 WhereIn 将查询转换为 Laravel Query Builder

mysql - 我可以使用变量在mysql中指定OUTFILE吗

mysql - 一个查询与一张表中的多行连接

mysql - django.db.utils.OperationalError : (1045, u“用户 'my_user' @'localhost' 的访问被拒绝(使用密码:NO)”)

Mysql查询选择非成员(member)

sql - 如何使用时间戳减去特定小时数进行 SQL Server 选择

sql - 自动删除和重新创建当前索引

mysql - 使用 DateDiff 查找 table_1.column A 和 table_2.column B 相差 <90 分钟的示例

php - 如果我删除所有特殊字符,Sql 注入(inject)的机会?

php - mysql UNION 重复项