我在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
答案 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。