SQL Server 在视图查询中将 LEFT JOIN 替换为 LEFT OUTER JOIN

Posted

技术标签:

【中文标题】SQL Server 在视图查询中将 LEFT JOIN 替换为 LEFT OUTER JOIN【英文标题】:SQL Server replaces LEFT JOIN for LEFT OUTER JOIN in view query 【发布时间】: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。这个*** 问题的答案提供了一个很好的解释:)。 如果视图需要外连接,那么它不能是索引。称它为左内连接并不能解决这个问题。 【参考方案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 程序员,但出于某种原因,我相信存在“左内连接”。不知道我为什么这么想

以上是关于SQL Server 在视图查询中将 LEFT JOIN 替换为 LEFT OUTER JOIN的主要内容,如果未能解决你的问题,请参考以下文章

在 SQL Server 2008 中将两个表合并到一个索引视图中

如何在 SQL SERVER 中将内联 SQL 查询转换为 JOINS 以减少加载时间

在 SQL Server 2008 中将查询结果导出到 .csv 文件

ORACLE LEFT JOIN 子查询 在SQL SERVER中可以使用如图中的子查询,ORACLE中怎么实现

使用 SQL Server 将子查询结果重用于其他计算

如何在 SQL Server 2005 中将随机数作为列返回?