SQL多列将具有相同的数据 - 如何缩短查询

时间:2015-09-11 11:21:06

标签: sql

我有几列数据的结果相同。

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

4 个答案:

答案 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索引。

这将提供最佳性能,因为模式匹配在正常索引上的表现不佳。