SQL Server中的自然连接

gre*_*ade 29 sql sql-server join

在最近的Microsoft SQL Server版本中是否支持自然连接?或者,是否有一个很好的替代方法可以使SQL Server ON根据参照完整性计算出在子句中的谓词?

gbn*_*gbn 32

不,谢谢幸运星

我不敢相信你想要引擎为你猜测 JOIN

相关链接:

编辑,解释原因

  • JOIN(无论是USING还是ON)清晰明确
  • 我应该可以为存储在表中的实体命名我的列,而不必担心在另一个表中调用列,没有NATURAL JOIN副作用

  • 促进是好的,自以为是的OP为什么OP"做错了"只是粗鲁,并且最大的SO问题之一,真的.它与用户想要用它做什么有什么区别?他们问了一个事实答案的问题,而不是你对他们的方法的看法.SO的其他部分也是如此. (34认同)
  • 我讨厌'感谢幸运星'点......但不是正确答案.. (19认同)
  • 它只是猜测实现是否做得很糟糕(列名).SQL Server有一种定义引用的精确方法,因此它有理由说它具有创建准确谓词所需的所有信息.还是我弄错了? (15认同)
  • 为了粗鲁而沮丧.一个设计良好的数据库模式适用于自然连接,如果我没有弄错,它是ANSI SQL 92的一部分.并非任何其他供应商似乎都非常关心该标准,但这并不是不支持它. (10认同)
  • 我同意@mrwaim,OP询问是否可以这样做,而不是它是否正确. (8认同)

Dam*_*ver 5

我不希望很快就能看到它.2006年Connect建议除了以下信息之外几乎没有其他信息:

感谢您的反馈意见.我们将查看您对即将发布的版本之一的请求.

而且只收到了~30个赞成票

  • 我更想到"Insertedby"和"InsertedOn"类型的列.或者你没有在注释列的前面加上表名,所以你有很多的注释列而不是重复的Thing.ThingComment和Stuff.StuffComment (4认同)
  • @gbn - 自然加入本身并不是一个坏主意.它不会"猜测",也不会根据外键推断.它只是匹配连接两侧的所有相同名称的列.如果你在两个具有相同名称的列表示不同内容的表之间加入,我通常会将其视为一个破坏的模式; 此外,它是一个选择性功能 - 它不会惩罚或改变任何现有代码的解释. (3认同)
  • @Damien_The_Unbeliever - 抱歉不同意但我认为NATURAL JOIN是一种可怕的坏习惯.你可以加入你注意到的列,你可以在几个表上有像IsActive,StatusID,Name,Description等列,这并不意味着一个破坏的模式.你可能会在没有注意到的情况下做错误.它与SELECT*相同.对数据模型的简单更改,您将在不注意的情况下更改过程结果集.将具有相同名称的列添加到另一个表将自动更改您的JOIN而不会注意到. (2认同)

Rém*_*umm 5

MS SQL不支持自然联接,也不使用()联接。您必须明确记下联接中使用的所有属性。

如果datamodel更改,则必须更改所有手写的“自然连接”,并确保您的连接条件再次正常。