0

我有以下查询,但它不会为 where 子句返回任何结果,即使存在具有这种名称的行所查询的内容。如果我删除 where 子句,则返回 Company 表中具有 OfficeLocation 表的所有记录。我的查询有什么问题?

SELECT c.* 
FROM        [MyDb].[dbo].[Company] AS c
INNER JOIN  [MyDb].[dbo].[CompanyOfficeLocation] AS col ON c.Id = col.CompanyId
INNER JOIN  [MyDb].[dbo].[OfficeLocation] AS ol ON ol.Id = col.OfficeLocationId
WHERE ol.Name like '%Actual Name In This Table%';

表结构:

Company
    Id
    etc ...

CompanyOfficeLocation
    CompanyId
    OfficeLocationId

OfficeLocation
    Id
    etc ...
4

2 回答 2

1

我没有发现任何错误,但是我建议您ON在加入后切换列以保持标准。

代替 -INNER JOIN [MyDb].[dbo].[OfficeLocation] AS ol ON ol.Id = col.OfficeLocationId

做 -INNER JOIN [MyDb].[dbo].[OfficeLocation] AS ol ON col.OfficeLocationId = ol.Id

于 2012-06-04T05:43:38.173 回答
1

考虑到您的查询,记录要显示的两件事:

  1. 您指定的 OfficeLocation(给定 ol.Name 值)必须具有一个 Id 值,该 Id 值由 CompanyOfficeLocation 表中的记录在其 OfficeLocationId 中使用。

  2. 您在 #1 中获得的 CompanyOfficeLocation 记录必须具有存在于 Company 表中的 CompanyId。

如果不满足这两个条件中的任何一个,则查询结果中不会显示任何记录。INNER JOIN 本质上是一个“AND”子句。如果一条记录不能与至少一个 INNER JOINed 表相关,那么该记录将根本不会显示。

如果您希望在联接表中没有任何相关记录的情况下显示记录,您可能需要考虑使用OUTER JOIN。确切地说,在您的情况下是正确的连接。

于 2012-06-04T06:10:32.373 回答