使用like获取所有行

时间:2017-10-30 11:47:08

标签: sql sql-server tsql sql-server-2008-r2

我正在使用SQL Server 2008 R2。

我有两张桌子:

城市:

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

公司:

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

Firm可以为null。

我需要创建一个以城市名称的一部分返回公司的查询。

我现在这样做:

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为空,我怎样才能获得所有公司?

4 个答案:

答案 0 :(得分:2)

我想你想要一个这样的查询:

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

SQL Server Fiddle Demo

答案 1 :(得分:0)

你可以尝试一下吗?

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 = '')

答案 2 :(得分:0)

使用其他逻辑进行比较,包括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 = '';

答案 3 :(得分:0)

您可以使用此查询:

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+'%'