我真的在为一个 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;
我试图用一张图片来说明我想做什么,希望这对您有所帮助。
最佳答案
根据您的描述,我提炼出了这个查询:
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
,而根据您的描述,它必须为 ONbb.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/