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 文件