最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

Join后面跟两个表

来源:懂视网 责编:小采 时间:2020-11-09 13:14:28
文档

Join后面跟两个表

Join后面跟两个表:发现 sql 的写法真是千奇百怪,经常遇到没见过的写法。前几天就遇到了一个 sql 在 join 后写两个表,用逗号分隔。类似下面。 select a.a, b.f from t1 a left join ( b, c ) on ( b.id = c.id and b.a = a.a ) 看到 sql 的这些
推荐度:
导读Join后面跟两个表:发现 sql 的写法真是千奇百怪,经常遇到没见过的写法。前几天就遇到了一个 sql 在 join 后写两个表,用逗号分隔。类似下面。 select a.a, b.f from t1 a left join ( b, c ) on ( b.id = c.id and b.a = a.a ) 看到 sql 的这些

发现 sql 的写法真是千奇百怪,经常遇到没见过的写法。前几天就遇到了一个 sql 在 join 后写两个表,用逗号分隔。类似下面。 select a.a, b.f from t1 a left join ( b, c ) on ( b.id = c.id and b.a = a.a ) 看到 sql 的这些用法我一般都是去 pgsql 的文档

发现 sql 的写法真是千奇百怪,经常遇到没见过的写法。前几天就遇到了一个 sql 在 join 后写两个表,用逗号分隔。类似下面。

select a.a, b.f from t1 a left join ( b, c ) on ( b.id = c.id and b.a = a.a )

看到 sql 的这些用法我一般都是去 pgsql 的文档里面去查,因为 pg 的文档里面一般会指明一种用法是否标准 sql,多写标准 sql 可以避免知识不能转移。不过去查了发现 pg 不支持这种写法,也去 pg 里面执行了,确实不支持。

然后就去看 mysql 的文档,里面有对于这种写法的支持。

 The syntax of table_factor is extended in comparison with the SQL Standard. The latter accepts only table_reference, not a list of them inside a pair of parentheses.

This is a conservative extension if we consider each comma in a list of table_reference items as equivalent to an inner join. For example:

SELECT * FROM t1 LEFT JOIN (t2, t3, t4)
 ON (t2.a=t1.a AND t3.b=t1.b AND t4.c=t1.c)

is equivalent to:

SELECT * FROM t1 LEFT JOIN (t2 CROSS JOIN t3 CROSS JOIN t4)
 ON (t2.a=t1.a AND t3.b=t1.b AND t4.c=t1.c)

In MySQL, JOIN, CROSS JOIN, and INNER JOIN are syntactic equivalents (they can replace each other). In standard SQL, they are not equivalent. INNER JOIN is used with an ON clause, CROSS JOIN is used otherwise. 

可以看到,这种写法就是等于是让括号里面的 b,c 使用 inner join 的方式连接,当然如果 on 里面没有指定 join 方式,最后就是个笛卡尔集。然后这里 有更多的一些说明,还有下面这种写法。

t1 LEFT JOIN t2 ON t1.a=t2.a, t3

这些写法都有各自的含义。

其实这么看来,这个方式好像是比较方便的,不过是对于不明白的人如果乱用,这玩意出的错也是很诡异很难排查的。

另外注意上面的语句里面写了,mysql 里面的 join, inner join, cross join 是完全同样的东西。

文档

Join后面跟两个表

Join后面跟两个表:发现 sql 的写法真是千奇百怪,经常遇到没见过的写法。前几天就遇到了一个 sql 在 join 后写两个表,用逗号分隔。类似下面。 select a.a, b.f from t1 a left join ( b, c ) on ( b.id = c.id and b.a = a.a ) 看到 sql 的这些
推荐度:
标签: 两个 发现 sql
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top