几周前,我进行了一个查询(不记得是什么),它涉及到BETWEEN运算符。起初,我在WHERE子句中使用它,但它没有产生正确的结果集(再次说明,我不记得问题是什么)。我思考了一下为什么,最终得出结论,我必须将其移到JOIN子句中。
例如。
"原始"查询:
例如。
"原始"查询:
SELECT --something
FROM table1 a
/*type of*/ JOIN table2 b ON a.field = b.field
WHERE b.field2 BETWEEN a.field2 AND a.field3 /*some other conditions*/
修改后的查询:
SELECT --something
FROM table1 a
/*type of*/ JOIN table2 b ON a.field = b.field
AND b.field2 BETWEEN a.field2 AND a.field3
WHERE /*some other conditions*/
JOIN
版本与WHERE
版本相比,返回的结果集较小,并且JOIN
版本产生了正确的结果集,而WHERE
版本没有。我现在询问的原因是因为当时我并没有想太多,但今天我的老板质疑我为什么这样做(针对完全不同的查询),我告诉他我上次的经历,他和我都很好奇两种用法之间的区别。我认为一个产生不同结果的原因是WHERE
子句版本只选择了一定范围的数据,而JOIN
版本则寻找了一定范围的数据进行连接。这是真的吗?还是我遇到了一个受到其他查询影响的独特经历(该查询比示例复杂得多)。编辑:我不同意可能的重复,因为我的问题具体涉及BETWEEN
子句,而不是一般的连接。我以前看过提到的帖子,它没有回答我的问题,这就是为什么我发布这个帖子的原因。
where子句和on子句在外连接中是不同的,但在语言上对于内连接有相同的行为
,而且你的帖子与那篇帖子是不同的。我只是想说,你的帖子不是“那篇”帖子的重复。 - Tushar