首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL连接: SQL ANSI标准的未来(where vs join)?

SQL连接: SQL ANSI标准的未来(where vs join)?
EN

Stack Overflow用户
提问于 2010-09-10 19:33:02
回答 9查看 2.6K关注 0票数 8

我们正在开发ETL作业,我们的顾问在连接表时一直在使用“旧式”SQL

代码语言:javascript
复制
select a.attr1, b.attr1
from table1 a, table2 b
where a.attr2 = b.attr2

而不是使用inner join子句

代码语言:javascript
复制
select a.attr1, b.attr1
from table1 as a inner join table2 as b
   on a.attr2 = b.attr2

我的问题是,从长远来看,使用旧的"where join“有风险吗?这种连接被支持并作为ANSI标准保留了多久?我们的平台是SQL Server,我的主要原因是将来不再支持这些"where joins“。当这种情况发生时,我们必须使用“内部连接”风格的连接来修改所有的ETL作业。

EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2010-09-10 19:40:40

我怀疑"where joins“永远不会被支持。不支持它们是不可能的,因为它们是基于笛卡尔乘积和简单过滤的。它们实际上不是joins。

但是,使用新的连接语法有很多原因。其中包括:

  • Readability
  • Maintainability
  • Easier更改为外部加入
票数 7
EN

Stack Overflow用户

发布于 2010-09-10 19:40:11

与其担心未来可能的风险,为什么不担心你现在面临的风险呢?

除了马克的观点之外:

当ON子句从连接的表断开连接(有时是多行连接)时,

  • The代码更难阅读(从而理解其用途)。这增加了修改code.
  • Determining时出错的可能性。当您使用ANSI语法时,ON子句会很好地对齐,这使得这一点变得微不足道--您必须浏览WHERE子句,并希望看到缺少JOIN子句的情况更加困难,从而增加了无意中发生笛卡尔连接的风险。
票数 8
EN

Stack Overflow用户

发布于 2010-09-10 19:36:23

避免隐式连接的原因有很多。最重要的是:

  • 它不容易更改为外连接。
  • 使用隐式连接更容易忘记连接条件。
  • 如果您同时使用隐式连接和显式连接,则会遇到优先级混乱的问题。下面是几个小时前的一个例子:MySQL Syntax error

我认为它们不会很快被移除,但有很多其他理由停止使用它们。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3684259

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档