简单 SQL Express 完全连接查询在应该返回空值时不返回
Posted
技术标签:
【中文标题】简单 SQL Express 完全连接查询在应该返回空值时不返回【英文标题】:Simple SQL Express Full Join Query does not return nulls when it should 【发布时间】:2020-09-25 11:20:36 【问题描述】:这里是查询:
SELECT
AttributeName.ID, Attributes.LinkAnalyses, Attributes.Value, AttributeName.Name
FROM
AttributeName
FULL OUTER JOIN
Attributes ON AttributeName.ID = Attributes.LinkName
我应该返回空值,因为 LinkAnalyses = 88 的链接名最多为 10,而属性名的链接名最多为 21。我应该得到 11 个空值,但我没有得到
输出:
属性表:
属性名表:
【问题讨论】:
【参考方案1】:完全连接将根据您在查询中使用的连接键起作用。
在您的查询中,您使用 AttributeName.ID = Attributes.LinkName,因此如果 AttributeName 中的任何 ID 在表 Attributes 的 LinkName 列中缺失(反之亦然)将返回空行。
您的 Attributes.LinkAnalysis 列中没有关系。
如果你想要 LinkAnalysis 明智的完全连接,你可以使用下面的查询
select
Id,Attributes.LinkAnalyses,Value,Name
from
( SELECT
an.LinkAnalyses,AttributeName.ID,AttributeName.Name
FROM
(Select distinct LinkAnalyses from Attributes ) an
, AttributeName
) A
full join Attributes on Attributes.LinkAnalyses=A.LinkAnalyses and A.ID =Attributes.LinkName
【讨论】:
AttributeName.ID 用作指向 Attributes.LinkAnalyses 的链接。上面的查询产生:Msg 207,Level 16,State 1,Line 7 列名“LinkAnalysis”无效。消息 207,级别 16,状态 1,第 5 行无效的列名称“ID”。消息 207,级别 16,状态 1,第 5 行无效的列名称“名称”。消息 207,级别 16,状态 1,第 10 行无效的列名称“LinkAnalysis”。消息 207,级别 16,状态 1,第 10 行无效的列名称“链接名称”。消息 209,级别 16,状态 1,行 2 不明确的列名称“Id”。消息 207,级别 16,状态 1,第 2 行无效的列名称“LinkAnalysis”。 - 无法适应所有错误 打错字了。您现在可以查看查询。以上是关于简单 SQL Express 完全连接查询在应该返回空值时不返回的主要内容,如果未能解决你的问题,请参考以下文章
C# 中的 SQL Server Express 连接字符串错误