在MySQL JOIN中,ONUSING()之间有什么区别?据我所知,USING()只是更方便的语法,而ON允许在列名不相同时有更多的灵活性.然而,这种差异是如此之小,你可能会认为他们会取消USING().

这里面有没有比我们想象的更多的东西?如果是,在特定情况下我应该使用哪一种?

推荐答案

主要是语法上的糖分,但有几个区别值得注意:

ON是两者中比较一般的.可以连接一列、一组列甚至一个条件上的表.例如:

SELECT * FROM world.City JOIN world.Country ON (City.CountryCode = Country.Code) WHERE ...

当两个表共享一个名称完全相同的列时,USING非常有用.在这种情况下,人们可能会说:

SELECT ... FROM film JOIN film_actor USING (film_id) WHERE ...

另一个好处是,不需要完全限定连接柱:

SELECT film.title, film_id -- film_id is not prefixed
FROM film
JOIN film_actor USING (film_id)
WHERE ...

为了举例说明,要用ON来完成上述操作,我们必须写:

SELECT film.title, film.film_id -- film.film_id is required here
FROM film
JOIN film_actor ON (film.film_id = film_actor.film_id)
WHERE ...

注意SELECT条款中的film.film_id限定.仅仅说film_id是无效的,因为这会造成歧义:

错误1052(23000):字段列表中的"film_id"列不明确

对于100,连接列在结果集中以ON出现两次,而以USING出现一次:

mysql> create table t(i int);insert t select 1;create table t2 select*from t;
Query OK, 0 rows affected (0.11 sec)

Query OK, 1 row affected (0.00 sec)
Records: 1  Duplicates: 0  Warnings: 0

Query OK, 1 row affected (0.19 sec)
Records: 1  Duplicates: 0  Warnings: 0

mysql> select*from t join t2 on t.i=t2.i;
+------+------+
| i    | i    |
+------+------+
|    1 |    1 |
+------+------+
1 row in set (0.00 sec)

mysql> select*from t join t2 using(i);
+------+
| i    |
+------+
|    1 |
+------+
1 row in set (0.00 sec)

mysql>

Mysql相关问答推荐

JPA对具有动态键和动态值的JSON列的原生查询

最终的自联表是如何记住关联的呢?

将时间戳四舍五入到最接近的半小时而不遗漏丢失的数据

如何清除mysql 8 innodb中的数据库缓存

使用索引进行查询优化

sequelize 中最好的更新方法是什么

分别针对每个不同的列 Select 聚合

MySQL - 单词边界的正则表达式,不包括下划线(连接标点符号)

使用 JOIN 计算列中的所有值

MYSQL如何将虚拟列添加到现有表中

MYSQL LOAD DATA INFILE 语句适用于工作台,但不适用于 python

估计行数 SQL

如何使用 phpmyadmin 复制数据库?

MySQL:在 Select 语句中自动增加临时列

WHERE 子句中的条件顺序会影响 MySQL 性能吗?

在 MySQL 中找不到 outfile 创建的文件

MySQL DAYOFWEEK() - 我的一周从星期一开始

MySQL:切换 int 字段值的简单方法

如何将具有相同列值的mysql行分组为一行?

应该使用什么列类型将序列化数据存储在 mysql 数据库中?