当前位置: 首页 > news >正文

SQL JOIN 时 USING 和 ON 的异同

在数据表做 join 时,即可以用 using,也可以用 on。有什么异同点呢。

ON 是更加普遍的用法,可以连接表 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_id 不需要加上 film. 或者 film_actor.

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

当上述 SQL 用 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 是不允许的,因为会照成歧义(两张表里都有)。

ERROR 1052 (23000): Column 'film_id' in field list is ambiguous

SELECT *, 使用 USING 时,关联的字段仅出现一次;使用 ON 时,关联的字段出现两次。

create table t(i int);
insert t select 1;
create table t2 select*from t;
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)
http://www.lryc.cn/news/182805.html

相关文章:

  • 安全学习_开发相关_JNDI介绍(注入)RMILDAP服务
  • C#学生选课及成绩查询系统
  • 【C语言】利用数组处理批量数据(一维数组和二维数组)
  • WPF中, 如何将控件的触发事件绑定到ViewModel
  • 解决Qt msvc编译器 中文显示乱码问题
  • JAVA面经整理(7)
  • CentOS7使用技巧
  • Nature Machine Intelligence | “化学元素知识+功能提示”双驱动,探索分子预测新方法
  • CppCheck静态代码检查工具教程【Windows和Linux端】
  • W25Q128芯片手册精读
  • QT商业播放器
  • Python的函数
  • 【物联网】STM32的中断机制不清楚?看这篇文章就足够了
  • 深入剖析红黑树:优雅地平衡二叉搜索树
  • C10K问题:高并发模型设计
  • 哈希/散列--哈希表[思想到结构][==修订版==]
  • 成都建筑模板批发市场在哪?
  • 亨元模式 结构型模式之六
  • 面试题: Spring中Bean的实例化和Bean的初始化有什么区别?
  • 阻塞队列,生产者消费者模型
  • 【RCRL充放电时间相关计算】
  • C++ primer plus--输入、输出和文件
  • 案例题--Web应用考点
  • MySQL的SQL 优化:提升数据库性能
  • 【匠心打造】从0打造uniapp 可视化拖拽设计 c_o 第十篇
  • BIT-5-操作符详解(C语言初阶学习)
  • 【重拾C语言】三、分支程序设计(双分支和单分支程序设计、逻辑判断、多分支程序设计、枚举类型表示;典型例题:判断闰年和求一元二次方程根)
  • Shiro应用到Web Application
  • 【POST请求-腾讯翻译君-爬虫案例】
  • 多卡片效果悬停效果