我可以看到人们以不同的方式进行连接
从a,b,c中选择a.acc,b.acc,c.acc,其中a.acc = b.acc和c.acc = a.acc;
和
在c.acc = a.acc上的a.acc = b.acc JOIN上选择a.acc,b.acc,c.acc JOIN;
有什么区别吗?我想不是.
在性能方面没有区别.
我更喜欢第二种可维护性方法.更明确的是使用哪些条件来连接哪些表,并且更容易看出是否错过了连接条件.
除了Mark的观点,使用后一种语法有助于确保您不会无意中错过连接条件,SQL 99语法的一个好处是,如果您的列命名约定是父级和子级中列的名称表匹配,您可以使用USING子句而不是ON子句,即
SELECT <<list of columns>>
FROM a JOIN b USING( acc )
JOIN c USING( acc )
Run Code Online (Sandbox Code Playgroud)
这可以提高代码的可读性,并降低因错误地无意中连接表而引入错误的可能性.如果每次我不小心写了类似的东西,我都有镍
SELECT <<list of columns>>
FROM a,
a_to_b,
b
WHERE a.a_id = a_to_b.a_id
AND b.b_id = a_to_b.a_id -- a_to_b.**a_id** rather than a_to_b.**b_id**
Run Code Online (Sandbox Code Playgroud)
当我真正的意思
SELECT <<list of columns>>
FROM a,
a_to_b,
b
WHERE a.a_id = a_to_b.a_id
AND b.b_id = a_to_b.b_id
Run Code Online (Sandbox Code Playgroud)
我会成为一个有钱人.或者至少有足够的寿司晚餐.
当然,大多数情况下,你做错了很明显,因为数据完全是错误的,但偶尔会发生结果非常接近,以至于你做错了并不是很明显,直到很久以后你发现了这个bug并追查了罪魁祸首的查询.如果使用USING子句编写查询,基本上不可能犯这种错误
SELECT <<list of columns>>
FROM a JOIN a_to_b USING (a_id)
JOIN b USING (b_id)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
48578 次 |
| 最近记录: |