sql server - 只有当第一个失败时,如何执行'或'子句的后半部分

时间:2012-10-04 21:11:42

标签: sql sql-server

假设我有一张包含以下记录的表

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

2 个答案:

答案 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'的行(如果存在)。