我需要在以下位置创建查询SQL 服务器 http://en.wikipedia.org/wiki/Microsoft_SQL_Server其中搜索条件将包括/排除基于用户输入的表。
假设我有两张桌子,TABLE_A
and TABLE_B
有柱子KEYCOLUMN_A
and COLUMN_A
in TABLE_A
和列FKCOLUMN_B
and COLUMN_B
in 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
and 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 %%
与消除病症本身一样好吗?
Wrap an OR
在“B”表周围,例如:
AND (len(searchString)=0 OR table_b.column_b LIKE "%searchString%" )
这样,如果字符串没有值,则其长度将为零,并且字符串的第一部分OR
将被评估,总是返回为真并将方程的该部分返回为有效并使用忽略另一半LIKE
clause.
您可以根据需要对任意数量的链接表应用相同的方法。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)