sql - 左加入不起作用

标签 sql sql-server ms-access

我是一名 SQL Server 初学者,所以我一直在使用 MS Access 创建查询,然后针对 SQL Server 修改它们。

我创建了一个包含左连接的查询,它在 Access 中运行良好,但当我将 SQL 代码复制到 SQL Server 时,它不显示空值,我无法弄清楚原因。

我想显示所有属性值,无论它们是否包含值。谁能帮忙?代码如下:

SELECT DISTINCT 
    tbLease.LeaseTitle
    , tbAttributeValue.AttributeTemplateDefinitionLinkID
    , tbAttributeValue.Value
FROM 
   ((((tbBusinessUnit 
LEFT JOIN 
   tbAttributeValue ON tbBusinessUnit.BusinessUnitID = tbAttributeValue.ParentID) 
INNER JOIN 
   tbBuildingLinkBusinessUnit ON tbBusinessUnit.BusinessUnitID  = tbBuildingLinkBusinessUnit.BusinessUnitID) 
INNER JOIN 
   tbBuilding ON tbBuildingLinkBusinessUnit.BuildingID = tbBuilding.BuildingID) 
INNER JOIN 
    (tbUnitLocation 
INNER JOIN 
    tbUnit ON tbUnitLocation.UnitID = tbUnit.UnitID) 
              ON tbBuilding.BuildingID = tbUnitLocation.LocationID) 
INNER JOIN 
    tbLease ON tbUnit.UnitID = tbLease.UnitID
WHERE 
    (((tbAttributeValue.AttributeTemplateDefinitionLinkID) = 30 
      Or (tbAttributeValue.AttributeTemplateDefinitionLinkID) = 31 
      Or (tbAttributeValue.AttributeTemplateDefinitionLinkID) = 32));

最佳答案

没有一些例子很难说出你想要什么,但你可能想要这个:

WHERE coalesce(tbAttributeValue.AttributeTemplateDefinitionLinkID,30) in (30,31,32);

这将为您提供 AttributeTemplateDefinitionLinkID 为 null 的项目 (也就是说它没有加入左连接)或者是这 3 个值之一。

现在,如果您不使用左连接进行连接,由于 where 条件,它不会显示该行,因此您的左连接与内部连接相同。

关于sql - 左加入不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34294807/

相关文章:

sql-server - SQL Server 登录前握手

ms-access - 如何锁定设计 View ?

sql - MySQL 中的递归存储函数

MySQL 服务器表创建 - "invalid syntax"

c# - SQL Server 数据库设置为多用户模式并返回错误单用户模式

java - SQL Server 2016 : Enable TLS 1. 2 用于 SQL Server 连接

sql - 如何使用开始日期和结束日期从 SQL 表中输出按天扩展的行?

java - 获取具有相同其他列值的两个连续行的列值

java.lang.ClassNotFoundException : sun. jdbc.odbc.JdbcOdbcDriver 发生异常。为什么?

ms-access - 是否可以将字符串转换为对象引用?