我有几列数据的结果相同。
DECLARE @Alias AS nvarchar(15)
SET @Alias = '%MyAlias%'
SELECT TOP 10
*
FROM
ATSStaging..LIR_Amendment
WHERE
(AppliedByUser LIKE @Alias
OR ModifiedByUser LIKE @Alias
OR CreatedByUser LIKE @Alias)
有没有办法缩短这一点,而不是将所有3列搜索到chekc以获得相同的值?
类似的东西:
WHERE
(AppliedByUser OR ModifiedbyUser OR CreatedByUser LIKE @Alias
答案 0 :(得分:0)
不,但你可以用以下方法欺骗它:
WHERE
concat(AppliedByUser, ModifiedbyUser, CreatedByUser) LIKE @Alias
答案 1 :(得分:0)
你可以将值连接在一起,然后使用like
:
SELECT TOP 10 *
FROM ATSStaging..LIR_Amendment
WHERE (AppliedByUser + '|' + ModifiedByUser + '|' + CreatedByUser) LIKE @Alias;
我不建议将其作为一般解决方案。但是,您的like
模式以通配符开头,因此无论如何您的查询都需要全表扫描。与or
(应该在匹配的第一列停止)相比,串联可能会产生少量的额外开销。您可能会发现全文索引为您提供了更多改进的功能和性能。
答案 2 :(得分:0)
在特定的情况下(因为您使用了LIKE'%match%'表达式),您可以使用连接:
WHERE AppliedByUser + ModifiedbyUser + CreatedByUser LIKE @Alias
一般来说,没有:但是你的查询原来并没有什么问题。
答案 3 :(得分:0)
根据您使用的DBMS,您可以使用FULLTEXTSEARCH。
例如,在SQL Server中,这意味着创建一个包含要搜索的数据的索引视图,然后创建该列上的FULLTEXT索引。
这将提供最佳性能,因为模式匹配在正常索引上的表现不佳。