我需要在SQL Server中创建一个查询其中搜索条件将根据用户输入包含/排除表格。
假设我有两个表,TABLE_A
和 TABLE_B
,其中 TABLE_A 中包含
以及 KEYCOLUMN_A
和 COLUMN_A
列TABLE_B
中的 FKCOLUMN_B
和 COLUMN_B
列。
查询如下:
SELECT TABLE_A.* FROM TABLE_A, TABLE_B WHERE TABLE_A.KEYCOLUMN_A = TABLE_B.FKCOLUMN_B
AND TABLE_A.COLUMN_A LIKE '%SEARCH%' AND TABLE_B.COLUMN_B LIKE '%SEARCH2%'
现在,如果用户不输入SEARCH2
,我就不需要搜索TABLE_B
。但这意味着 IF ELSE
子句。而且,随着查询中“可选”表数量的增加,排列和组合也会增加,并且会出现许多 IF
和 ELSE
语句。
相反,我决定保留声明原样。因此,如果 SEARCH2
为空,查询将有效地变为:
SELECT * FROM TABLE_A, TABLE_B WHERE TABLE_A.KEYCOLUMN_A = TABLE_B.FKCOLUMN_B
AND TABLE_A.COLUMN_A LIKE '%SEARCH%' AND TABLE_B.COLUMN_B LIKE '% %'
SQL 优化器能否识别出 LIKE %%
与删除条件本身一样好?
最佳答案
在“B”表周围使用 OR
,例如:
AND (len(searchString)=0 OR table_b.column_b LIKE "%searchString%" )
这样,如果字符串没有值,则其长度将为零,并且将评估 OR
的第一部分,始终返回 true 并将方程的该部分返回为有效并使用 LIKE
子句忽略另一半。
您可以根据需要对任意数量的链接表应用相同的方法。
关于sql-server - 将 SQL LIKE 运算符与 %% 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1476737/