我正在使用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
为空,我怎样才能获得所有公司?
答案 0 :(得分:2)
我想你想要一个这样的查询:
select *
from Firm f
left join City c on f.CityId = c.CityId
where isnull(c.Name, '') like '%'+@cityName+'%';
答案 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+'%'