加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql – 表连接中“使用”和“开”之间有什么区别?

发布时间:2020-12-12 08:54:21 所属栏目:MsSql教程 来源:网络整理
导读:这是 ... T1 join T2 using(ID) where T2.VALUE=42 ... 一样 ... T1 join T2 on(T1.ID=T2.ID) where T2.VALUE=42 ... 适用于所有类型的连接? 这是我对使用(ID)的理解,它只是“on(T1.ID = T2.ID)”的简短手段.这是真的? 现在再来一个问题 以上是一样的 ... T
这是
... T1 join T2 using(ID) where T2.VALUE=42 ...

一样

... T1 join T2 on(T1.ID=T2.ID) where T2.VALUE=42 ...

适用于所有类型的连接?

这是我对使用(ID)的理解,它只是“on(T1.ID = T2.ID)”的简短手段.这是真的?

现在再来一个问题

以上是一样的

... T1 join T2 on(T1.ID=T2.ID and T2.VALUE=42) ...

我不认为是真的,但为什么? on子句中的条件如何与join相关联,如果它在where子句中?

解决方法

我不使用USING语法,因为

>我的大多数联接不适合(不是匹配的字段名,和/或连接中的多个匹配),
>在多于两个表的情况下,它不是立即显而易见的

即假设有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)

还是别的呢?

找出一个特定的数据库版本是一个相当微不足道的工作,但我没有足够的信心,所有的数据库是一致的,我不是唯一的人必须维护我的代码(所以其他人也必须知道相当于什么).

与WHERE vs ON有明显差异,如果连接是外部的:

假设具有单个ID字段的T1,包含值1的一行和具有ID和VALUE字段(一行,ID = 1,VALUE = 6)的T2,则得到:

SELECT T1.ID,T2.ID,T2.VALUE FROM T1 LEFT OUTER JOIN T2 ON(T1.ID=T2.ID) WHERE T2.VALUE=42

没有行,因为WHERE需要匹配,而

SELECT T1.ID,T2.VALUE FROM T1 LEFT OUTER JOIN T2 ON(T1.ID=T2.ID AND T2.VALUE=42)

将给出一行值

1,NULL,NULL

因为ON仅需要匹配连接,这是由于外部可选的.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读