我需要在SQL Server中创建查询,其中搜索条件将基于用户输入包括/排除表。
说我有两个表,TABLE_A
和TABLE_B
,在KEYCOLUMN_A
中有COLUMN_A
和TABLE_A
列,在FKCOLUMN_B
中有COLUMN_B
和TABLE_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
子句忽略另一半。您可以根据需要将相同的表应用于多个链接表。