SQL 查询:可以使用相同的查询参数同时搜索两列吗?

SQL queries: Possible to search two columns at once with the same query parameter?

我有一个搜索功能,可以在数据库中搜索与 query_string 匹配的单词。目前,您可以按街道或按地区、USRN 等搜索,例如,如果您同时输入街道和地区,它不会找到任何东西,因为街道和地区是相同的两个单独的列 table.但是,如果我输入其中任何一个,查询 returns 相关建议列表。我怎样才能使一个不​​抵消另一个?

谢谢

这是我的查询:

SELECT USRN,
       RTRIM(SD)+', '+RTRIM(NT.TOWN_NAME) AS FEATURE_NAME,
       KEYWORDS = CAST(USRN AS VARCHAR(15))+' '+RTRIM(SD)+''+RTRIM(NL.LOCALITY_NAME)+' '+RTRIM(NT.TOWN_NAME)+''+RTRIM(NA.AUTHORITY_NAME)
FROM NS
     INNER JOIN NT ON NT.TOWN_UID = NS.TOWN_UID
     INNER JOIN NL ON NL.LOCALITY_UID = NS.LOCALITY_UID
     INNER JOIN NA ON NA.AUTHORITY_UID = NS.AUTHORITY_UID
WHERE CAST(USRN AS VARCHAR(15))+' '+RTRIM(SD)+' '+RTRIM(NL.LOCALITY_NAME)+' '+RTRIM(NT.TOWN_NAME)+''+RTRIM(NA.AUTHORITY_NAME) LIKE '%'+@SEARCH_STRING+'%';

编辑:经过一番思考,我认为可以将 query_string 拆分为单个单词,然后动态地对每个拆分单词应用 LIKE 语句。

以下查询会对您有所帮助。使用 STRING_SPLIT 和 CROSS APPLY 你可以得到结果。

CREATE TABLE #TempTable(USRN Varchar(50), STREET_DESCRIPTOR varchar(50), LOCALITY_NAME VARCHAR(50), TOWN_NAME VARCHAR(50), AUTHORITY_NAME VARCHAR(50))

DECLARE @searchString varchar(max) = '456 eiusmod dolore'

INSERT INTO #TempTable VALUES('Lorem', '123 ipsum', 'dolor', 'sit', 'amet'),
('consectetur', '123 do', 'ut', 'magna', 'ad'),
('adipiscing', '456 eiusmod', 'labore', 'aliqua', 'minim'),
('elit', '789 tempor', 'et', 'Ut', 'veniam'),
('sed', '234 incididunt', 'dolore', 'enim', 'quis')

SELECT DISTINCT USRN,STREET_DESCRIPTOR,LOCALITY_NAME, TOWN_NAME,AUTHORITY_NAME
FROM #TempTable T
CROSS APPLY(
SELECT value FROM STRING_SPLIT(@searchString, ' ')
) R
WHERE T.USRN LIKE '%'+R.value+'%' OR  
      T.STREET_DESCRIPTOR LIKE '%'+R.value+'%' OR  
      T.LOCALITY_NAME LIKE '%'+R.value+'%' OR  
      T.TOWN_NAME LIKE '%'+R.value+'%' OR  
      T.AUTHORITY_NAME LIKE '%'+R.value+'%'

DROP TABLE #TempTable