这是吗
... T1 join T2 using(ID) where T2.VALUE=42 ...
一样
... T1 join T2 on(T1.ID=T2.ID) where T2.VALUE=42 ...
对于所有类型的连接?
我对
using(ID)
的理解是它只是on(T1.ID=T2.ID)
的简写。这是真的吗?现在再问一个问题:
上面的和
... T1 join T2 on(T1.ID=T2.ID and T2.VALUE=42) ...
我不认为这是真的,但为什么?如果在WHERE子句中,ON子句中的条件如何与联接vs交互?
最佳答案
我不使用使用语法,因为
我的大多数联接都不适合它(不匹配的字段名和/或联接中的多个匹配项),并且
在有两张以上表格的情况下,它的意思并不是很明显
假设有3个表,分别有'id'和'id_2'列,是吗?
T1 JOIN T2 USING(id) JOIN T3 USING(id_2)
成为
T1 JOIN T2 ON(T1.id=T2.id) JOIN T3 ON(T1.id_2=T3.id_2 AND T2.id_2=T3.id_2)
或
T1 JOIN T2 ON(T1.id=T2.id) JOIN T3 ON(T2.id_2=T3.id_2)
还是别的什么?
找到一个特定的数据库版本是一个相当简单的练习,但是我没有很大的信心它在所有数据库中都是一致的,而且我不是唯一一个必须维护我的代码的人(因此其他人也必须知道它的等价性)。T to)。
如果连接是外部的,则与Where和On有明显的区别:
假设一个T1有一个ID字段,一行包含值1,一个T2有一个ID和值字段(一行,ID=1,值=6),那么我们得到:
SELECT T1.ID, T2.ID, T2.VALUE FROM T1 LEFT OUTER JOIN T2 ON(T1.ID=T2.ID) WHERE T2.VALUE=42
不给出行,因为需要匹配的位置,而
SELECT T1.ID, T2.ID, T2.VALUE FROM T1 LEFT OUTER JOIN T2 ON(T1.ID=T2.ID AND T2.VALUE=42)
将给出一行值
1, NULL, NULL
因为on只是匹配join所必需的,这是可选的,因为它是外部的。
关于mysql - MySQL中表连接中“using”和“on”之间的区别是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/370268/