我有以下查询,但它不返回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 ...
答案 0 :(得分: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
答案 1 :(得分:1)
根据您的查询显示记录的两件事:
您指定的OfficeLocation(给定ol.Name值)必须具有其OfficeLocationId中CompanyOfficeLocation表中的记录使用的Id值。
您在#1中获得的CompanyOfficeLocation记录必须具有Company表中存在的CompanyId。
如果未满足这两个条件中的任何一个,则查询结果中不会显示任何记录。 INNER JOIN本质上是一个'AND'子句。如果记录与至少一个INNER JOINed表无关,则该记录根本不会显示。
如果您希望显示记录,尽管联接表中没有任何相关记录,您可能需要考虑使用OUTER JOIN。在你的情况下,确切地说是正确的加入。