简单 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 连接字符串错误

使用 Java 连接 SQL Server 2005 Express

SQL多表联查总结

Sql 完全外连接查询在 SQLAlchemy 中不起作用

SQL 命令未正确结束尝试使用查询连接 3 个表

SQL Server比较两个应该相同的查询的结果