嗯,这可能只是一个&#34;问题&#34; 问题,但我真的想更多地了解JOIN t ON <equal condition>
和{{之间的区别1}}。
当然,我假设这两个表具有相同的列,具有相同的名称和相同的数据类型。在这种情况下:
JOIN t USING(<list of columns>)
子句吗?我已经阅读w3resource.com上的USING
以及NATURAL JOIN
与NATURAL JOIN
条款相关的question但他们似乎没有回答前两个问题......
此外,w3resource.com EQUI JOIN
部分和INNER JOIN
部分都未提及ON
&#34;技术&#34;。
答案 0 :(得分:5)
在大多数情况下,这是一个风格问题(事实上并非所有数据库都支持using
)。有一个小的区别。如果你这样做:
select *
from t1 join
t2
on t1.col1 = t2.col1
然后col1
在结果集中出现两次。如果你这样做:
select *
from t1 join
t2
using (col1)
然后col1
只出现一次。
我喜欢的using
的一个方面是它鼓励外键与主键具有相同的名称。如果可能的话(并不总是可行),我认为这是一个很好的设计,使数据库更容易使用。
在某些情况下,using
可能做出意想不到的事情。在join
s的长链中,它没有指定密钥的来源。但是,我没有发现这在精心设计的数据库中存在问题。
另一方面,natural join
是令人厌恶的,不应该被使用。它们不指定要连接的列。他们甚至不尊重外键关系。在比较的列上不清楚只是对代码中的错误的邀请 - 可能真的,真的很难找到的错误。