SQL - 连接之间与位置之间
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/29011643/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
SQL - JOIN BETWEEN vs WHERE BETWEEN
提问by RoyalSwish
A few weeks ago I did a query (can't remember what for) and it involved the BETWEEN
operator. At first, I used this in the WHERE
clause, but it didn't produce the correct result set (again, I don't remember what the problem was). I thought about why and eventually concluded that I had to move it to the JOIN
clause.
几周前,我做了一个查询(不记得是为了什么),它涉及到BETWEEN
操作员。起初,我在WHERE
子句中使用了这个,但它没有产生正确的结果集(再次,我不记得问题是什么)。我想了想为什么,最终得出结论,我必须把它移到JOIN
子句中。
e.g.
例如
"Original" query:
“原始”查询:
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*/
Revised query:
修改后的查询:
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*/
The JOIN
version returned a smaller result set compared to the WHERE
version, and the JOIN
version produced the correct result set whereas WHERE
one didn't.
与JOIN
版本相比,版本返回的结果集更小WHERE
,JOIN
版本生成了正确的结果集,而WHERE
一个则没有。
The reason I'm asking now is because at the time I thought nothing of it, but today my boss questioned why I did it (for an entirely different query) and I told him the experience I had the last time I did, and both he and I are quite intrigued as to the differences between the two usages.
我现在问的原因是因为当时我什么也没想到,但是今天我的老板质疑我为什么这样做(对于一个完全不同的问题),我告诉他我上次这样做的经历,并且两者都他和我对这两种用法之间的差异非常感兴趣。
From what I think as to why one produced something different to the other is that the WHERE
clause version only selecteda range of data, whereas the JOIN
version looked for a range of data to joinon. Is this the case? Or I did come across a unique experience affected by the rest of the query (the query was much more complicated than the examples).
我认为为什么一个人产生与另一个不同的东西是WHERE
条款版本只选择了一系列数据,而JOIN
版本则寻找一系列数据来加入。是这种情况吗?或者我确实遇到了受其余查询影响的独特体验(查询比示例复杂得多)。
EDITI disagree with the possible duplicate because my one looks specifically at the BETWEEN
clause, not joins in general. I have read the mentioned post before and it didn't answer my question, hence why I posted this.
编辑我不同意可能的重复,因为我的一个专门查看BETWEEN
子句,而不是一般的连接。我之前已经阅读了提到的帖子,但它没有回答我的问题,因此我发布了这个帖子。
回答by Matt
There's no difference between two versions, except if you have wrong precedence in one of them due to lack of parentheses.
两个版本之间没有区别,除非您在其中一个版本中由于缺少括号而具有错误的优先级。