1

次のレコードを持つテーブルがあるとします

value                    text
company/about            about Us
company                  company
company/contactus        company contact

以下のように、SQLサーバーに非常に単純なクエリがあります。「または」条件に問題があります。以下のクエリでは、値「company/about」のテキストを検索しようとしています。見つからない場合は、「または」の反対側を実行したいだけです。以下のクエリは、以下のように 2 つのレコードを返します

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
4

2 に答える 2

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'))
)
于 2012-10-04T21:26:31.787 に答える
1

2番目の条件は、value = 'company'これが機能するように書き直すことができるため(少なくとも、提示したデータとクエリに対して):

select top(1) [value], [text]
from dbo.MyTable
where value in ('company/about', 'company')
order by len(value) desc

TOP()は、両方が見つかった場合は 2 番目の行を無視し、存在ORDER BYする場合は常に最初の行が「company/about」を含む行になるようにします。

于 2012-10-04T21:35:17.963 に答える