假设我有一张包含以下记录的表
value text
company/about about Us
company company
company/contactus company contact
我在sql server中有一个非常简单的查询,如下所示。我对'或'条件有疑问。在下面的查询中,我试图找到值'company / about'的文本。如果没有找到,那么只有我想运行'或'的另一面。以下查询返回两条记录,如下所示
value text
company/about about Us
company company
查询
select
*
from
tbl
where
value='company/about' or
value=substring('company/about',0,charindex('/','company/about'))
如何修改查询以使结果集看起来像
value text
company/about about Us
答案 0 :(得分:1)
有点迂回,但您可以检查第一个where子句中是否存在结果:
select
*
from
tbl
where
value='company/about' or
(
not exists (select * from tbl where value='company/about')
and
value=substring('company/about',0,charindex('/','company/about'))
)
答案 1 :(得分:1)
由于您的第二个条件可以重写为value = 'company'
,这可行(至少对于您提供的数据和查询):
select top(1) [value], [text]
from dbo.MyTable
where value in ('company/about', 'company')
order by len(value) desc
TOP()
如果找到,则忽略第二行,ORDER BY
确保第一行始终是'company / about'的行(如果存在)。