SQL like子句不返回任何结果

时间:2012-06-04 05:36:41

标签: sql sql-server

我有以下查询,但它不返回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 ...

2 个答案:

答案 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)

根据您的查询显示记录的两件事:

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

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

  3. 如果未满足这两个条件中的任何一个,则查询结果中不会显示任何记录。 INNER JOIN本质上是一个'AND'子句。如果记录与至少一个INNER JOINed表无关,则该记录根本不会显示。

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