【问题标题】:SQL Server replaces LEFT JOIN for LEFT OUTER JOIN in view querySQL Server 在视图查询中将 LEFT JOIN 替换为 LEFT OUTER JOIN
【发布时间】:2015-05-20 19:42:32
【问题描述】:

我需要在视图中使用 LEFT JOIN,但是每次保存视图时,SQL Server 都会将 LEFT JOIN 替换为 LEFT OUTER JOIN。

当尝试明确使用 LEFT INNER JOIN 时,我收到错误“单词 'INNER' 附近的语法不正确”。更重要的是,当我想为视图创建索引时,我收到错误“无法使用 OUTER JOINS 向视图添加聚集索引”。

这令人抓狂,想知道为什么会发生这种情况?

因此,当我尝试为视图创建索引时,我收到消息,尽管我没有使用外连接。

【问题讨论】:

  • 你试过用INNER JOIN代替LEFT INNER JOIN吗?
  • 是的,它有效。但这不是我想做的(我需要表 A 中的所有行,而不仅仅是重叠的行)
  • 好吧,我想我不明白那是什么问题。我只知道该错误是在抱怨语法,因为您不能在 SQL Server 中使用 LEFT INNER JOIN。可以在W3Schools SQL Joins 找到可能的连接列表。
  • 那是因为LEFT JOIN 与 SQL server 中的LEFT OUTER JOIN 相同 傻:P。这个StackOverflow 问题的答案提供了一个很好的解释:)。
  • 如果视图需要外连接,那么它不能是索引。称它为左内连接并不能解决这个问题。

标签: sql-server tsql views


【解决方案1】:

您对连接感到困惑,请记住有不同的书写连接方式。您正在寻找的是 LEFT OUTER JOIN(OUTER 是可选的)。没有 LEFT INNER JOIN。

有三种主要的连接类型。

类型 1:INNER JOIN - 仅当两个表都匹配时

1.) INNER JOIN 又名 JOIN

类型 2:一个或两个表匹配的外部连接

1.) 左外连接 又名 左连接

2.) RIGHT OUTER JOIN 又名 RIGHT JOIN

3.) 完全外连接 又名 完全连接

类型 3:CROSS JOIN - 笛卡尔积(每个表的所有可能组合)

1.) 交叉连接

这是一个显示每个工作原理的图形:

【讨论】:

  • 你的回答救了我;尽管我已经做了几年 SQL 程序员,但出于某种原因,我相信存在“左内连接”。不知道我为什么这么想
猜你喜欢
  • 2010-09-29
  • 1970-01-01
  • 2015-01-10
  • 1970-01-01
  • 2014-08-10
  • 1970-01-01
  • 2013-03-14
  • 1970-01-01
相关资源
最近更新 更多