【发布时间】:2017-05-02 18:41:28
【问题描述】:
我正在使用 MySQL 将两个不同的表连接在一起。 people 和 homes。
当我尝试使用 USING 关键字将两者内部连接在一起时,它会返回一列用于我想要加入的相交列(地址):
SELECT * FROM people INNER JOIN homes USING(address);
+---------------------+------------+-----------+----------+
| address | first_name | last_name | city |
+---------------------+------------+-----------+----------+
| 533 Dufferin Street | Joe | Smith | Toronto |
| 421 Yonge Street | John | Schmidt | New York |
| 90 Bayview Avenue | Mary | Poppins | Chicago |
| 800 Keele Street | Joe | Dirt | L.A |
+---------------------+------------+-----------+----------+
然而,当您使用 ON 关键字对两个表进行内部连接时,它会返回两列 address(相交列)。
SELECT * from people INNER JOIN homes ON(people.address = homes.address);
+------------+-----------+---------------------+---------------------+----------+
| first_name | last_name | address | address | city |
+------------+-----------+---------------------+---------------------+----------+
| Joe | Smith | 533 Dufferin Street | 533 Dufferin Street | Toronto |
| John | Schmidt | 421 Yonge Street | 421 Yonge Street | New York |
| Mary | Poppins | 90 Bayview Avenue | 90 Bayview Avenue | Chicago |
| Joe | Dirt | 800 Keele Street | 800 Keele Street | L.A |
+------------+-----------+---------------------+---------------------+----------+
所以我想总结一下,为什么USING 导致列address 显示一次,而ON 导致address 显示两次?
【问题讨论】:
-
MySQL ON vs USING? 的可能重复 ...它没有深入解释为什么,但我认为这只是为了让事情变得更简单,因为无论如何 USING 都是语法糖
-
不是重复的。这询问了 MySQL ON 与 Using 之间的一般差异。我的询问一个特定实例,说明为什么两个输出不同的结果。虽然第一个答案指出 select * FROM INNER JOIN ON 导致被列出两次,但没有解释原因。
-
真的吗?您阅读了 Robert Rocha 的回答,但对您不满意?
-
"此外,JOIN USING 的输出抑制了冗余列:不需要打印两个匹配的列,因为它们必须具有相同的值。而 JOIN ON 生成 T1 中的所有列,然后是所有列T2 的列”
-
唯一的事情是那是为了 Postgres。这也适用于 MySQL 吗?