使用 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
CityId
在 Firm
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+'%';
您可以使用此查询:
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+'%'
我正在使用 SQL Server 2008 R2。
我有两个table:
城市:
CityId | Name
-------+-----------
1 | New York
2 | Sydney
坚定:
FirmId | Name | CityId
-------+-------+--------
1 | Firm1 | 1
2 | Firm2 | 2
3 | Firm3 | null
CityId
在 Firm
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+'%';
您可以使用此查询:
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+'%'