我有一个连接几个表的SQL查询,我想为结果集的许多列使用相同的LIKE条件过滤记录。 例如,我的查询中有列t1.Name,t1.FullName,t1.Comment,t2.Name,t3.Description等(t1,t2和t3是连接的表名),我想检查t1.Name或t1.FullName或t1.Comment或t2.Name或t3.Description是LIKE'%sometext%'。 我只是对SQL更快会感兴趣吗?
WHERE t1.FullName LIKE '%sometext%' OR t1.Comment LIKE '%sometext%' OR
t2.Name LIKE '%sometext%' OR t3.Description LIKE '%sometext%'
或
WHERE ISNULL(t1.Name,'') + '|' + ISNULL(t1.FullName,'') + '|' + ISNULL(t1.Comment,'') + '|' + ISNULL(t2.Name,'') + '|' + ISNULL(t3.Description,'') LIKE '%sometext%'
或者可能有一些更快的方式? 我正在使用MS SQL Server 2008 R2。
UPD:我编辑了第二个查询来处理某些字段为NULL并且连接可能包含模式但字段不包含的情况。
答案 0 :(得分:1)
答案 1 :(得分:1)
我会这样写:
WHERE t1.FullName LIKE '%sometext%' OR t1.Comment LIKE '%sometext%' OR
t2.Name LIKE '%sometext%' OR t3.Description LIKE '%sometext%'
不使用后者的几个原因,更快甚至没有发挥作用:
t1.FullName + ....
可能会导致NULL - 您必须处理此t1.FullName + ....
可能导致在t1.Comment和t2.Name之间找到Text,例如
matches
hubble 答案 2 :(得分:1)
取决于列的大小和数量以及搜索字符串的频率。还有其他的东西。
请注意,两个查询不会产生相同的结果。 concatinating查询不像第一个那样处理NULL值。
想象一下,名称以'%some'结尾,描述以'text%'开头。
答案 3 :(得分:0)
我认为第二种方式更好:
WHERE t1.Name + t1.FullName + t1.Comment + t2.Name + t3.Description LIKE '%sometext%'
然而,这两个问题都有优点和缺点;如果这些字段包含非常大(长)的数据,则查询#1可以更快地工作。
答案 4 :(得分:0)
"WHERE t1.FullName LIKE '%sometext%' OR t1.Comment LIKE '%sometext%' OR
t2.Name LIKE '%sometext%' OR t3.Description LIKE '%sometext%'"
or
"WHERE t1.Name + t1.FullName + t1.Comment + t2.Name + t3.Description LIKE '%sometext%'"
=============
Here Both are take same time bacause each condition is checked by separatly one by one.
No way to differnce in both condition.