【发布时间】:2009-09-25 11:17:36
【问题描述】:
我需要在 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 %% 与删除条件本身一样好?
【问题讨论】:
-
第二个代码示例中有错字。 % 和 % 之间不应有任何空格。 SELECT * FROM TABLE_A, TABLE_B WHERE TABLE_A.KEYCOLUMN_A = TABLE_B.FKCOLUMN_BAND TABLE_A.COLUMN_A LIKE '%SEARCH%' AND TABLE_B.COLUMN_B LIKE '%%'
-
像其他人一样使用“sql-server”标签...
-
@devanalyst:你不能编辑问题来修正错字吗?
标签: sql-server pattern-matching sql-like