使用 like 获取所有行

Get all rows using like

我正在使用 SQL Server 2008 R2。

我有两个table:

城市:

CityId | Name
-------+-----------
1      | New York
2      | Sydney

坚定:

FirmId | Name  | CityId
-------+-------+--------
 1     | Firm1 | 1
 2     | Firm2 | 2
 3     | Firm3 | null

CityIdFirm table 中可能为空。

我需要创建一个 returns 按城市名称的一部分确定的查询。

我现在是这样做的:

declare @cityName varchar(20)
set @cityName=''

select * 
from Firm f
join City c on f.CityId=c.CityId
where c.Name like '%'+@cityName+'%'

问题是,当 @cityName 为空字符串时,我想获取所有公司,包括城市为空的公司。

@cityName 为空时如何获取所有公司?

你能试试这个吗?

declare @cityName varchar(20)
set @cityName=''

select * from Firm f
left join City c on f.CityId=c.CityId
where (c.Name like '%'+@cityName+'%' AND @cityName <> '')
OR (@cityName = '')

使用额外的逻辑进行比较,包括 left join:

select f.*, c.*
from Firm f left join
     City c
     on f.CityId = c.CityId
where (c.Name like '%' + @cityName + '%') or
      (@cityName is null or @cityName = '');

或者,您可以使用 union all:

select f.*
from Firm f join
     City c
     on f.CityId = c.CityId
where c.Name like '%' + @cityName + '%'
select f.*
from Firm f
where @cityName is null or @cityName = '';

我想你想要这样的查询:

select * 
from Firm f
left join City c on f.CityId = c.CityId
where isnull(c.Name, '') like '%'+@cityName+'%';

SQL Server Fiddle Demo

您可以使用此查询:

declare @cityName varchar(20)
set @cityName=''

select * from Firm f
left join City c on f.CityId=c.CityId
where isnull(c.Name, '') like '%'+@cityName+'%'