MySQL内连接范围查询困难

时间:2011-11-27 19:14:42

标签: 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

2 个答案:

答案 0 :(得分:2)

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

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,而根据您的说明,它必须为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

答案 1 :(得分:1)

在回答之前,我们需要知道发生了什么。它有用吗?它产生了什么?有错误吗?

无论如何,这是我的猜测(同样,我假设你不使用像1或2或3这样的列名,这只是为了演示目的):

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

唯一的变化是表A的连接条件。您的语法错误应该是。我简化了条件。