dev*_*yst 5 sql-server pattern-matching sql-like
我需要在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%'
Run Code Online (Sandbox Code Playgroud)
现在,如果用户没有输入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 '% %'
Run Code Online (Sandbox Code Playgroud)
SQL优化器能够识别出LIKE %%与删除条件本身一样好吗?
DRa*_*app 10
缠绕OR"B"表,例如:
AND (len(searchString)=0 OR table_b.column_b LIKE "%searchString%" )
Run Code Online (Sandbox Code Playgroud)
这样,如果字符串没有值,它的长度将为零,并且OR将评估第一部分,则总是返回true,并将等式的该部分返回为有效,并使用该LIKE子句忽略另一半.
您可以根据需要为多个链接表应用相同的内容.
| 归档时间: |
|
| 查看次数: |
67921 次 |
| 最近记录: |