sql中的where子句和匹配字段

时间:2017-10-25 09:41:36

标签: sql-server

我在sql server中有一个包含3列的表MyTable:

column1 | column2 | column 3

这3列的类型为nvarchar(128)。我正在执行以下请求:

select * from MyTable where column1 = @searchedValue
or column2 = @searchedValue
or column3 = @searchedValue

一切都运作良好。但我想提出以下功能:

现在,此搜索由用户使用asp.net应用程序完成,在该应用程序中,他指定要搜索的值。他只得到匹配的结果。但是我想给这些结果带来的是一个名为matchingField的额外字段(除了column1,column2,column3之外),它将作为一个值与where子句匹配的列的名称。

例如:

如果我在db中有这个数据:

column1 | column2 | column3
kevin   | spacey  | actor
michael | jordan  | basketball player

作为用户,我发送了值" kev"搜索我想得到:

MyResult :
column 1 : kevin
column 2 : spacey
column 3 : actor
matching field : column 1

而不仅仅是:

MyResult :
column 1 : kevin
column 2 : spacey
column 3 : actor

2 个答案:

答案 0 :(得分:1)

您可以使用CASE WHEN ..

select column1, column2, column3,
        (case when column1 like '%'+@searchedValue+'%'
            then 'column1'
            when column2 like '%'+@searchedValue+'%'
            then 'column2'
            else 'column3' end) as matching_field
from MyTable 
where column1 like '%'+@searchedValue+'%'
or column2 like '%'@searchedValue+'%'
or column3 like '%'@searchedValue+'%'

此处matching_field返回第一个匹配列。

答案 1 :(得分:0)

首先可能不要使用或在此查询中。它可能会导致性能问题。最好以这种方式做到:

select *, 'col1' as matching_field from MyTable where column1 = @searchedValue UNION
select *, 'col2' as matching_field from MyTable where column2 = @searchedValue UNION
select *, 'col3' as matching_field from MyTable where column3 = @searchedValue

您可以通过此方法获得列匹配字段,并在后端代码中计算有多少匹配等于col1,col2和col3。