将 select 结果传递给 SQL 中的 like 运算符

Passing select result to like operator in SQL

我在一个客户中有名字的结果table

我想查找此名称是否出现在日志 table 列中

我的日志table changedate 列会记录name和id,我只想找name

select top 100 *
from LogDataTable
where ChangeData like '%'+'select name from customer'+ '%'

但是我没有得到这个查询的结果,我必须做任何更改吗?能做到吗?

您可以使用联接按照您要求的方式比较数据,例如

select top 100 L.*
from dbo.LogDataTable L
inner join dbo.Customer C on L.ChangeData like '%' + C.[Name] + '%';

虽然它的性能不会很好,因为它必须对 LogDataTable 中的每一行进行 table 扫描 Customer

如果您能够确保客户名称始终是 ChangeData 的第一部分,您可以使用 like C.[Name] + '%' 然后从索引中获益。

要解决您的整理错误,请重新整理查询中的其中一列。我建议更改 C.[Name],因为它已经是 table 扫描的主题。但这取决于您是否需要“重音敏感”比较,例如

select top 100 L.*
from dbo.LogDataTable L
inner join dbo.Customer C on L.ChangeData like '%' + C.[Name] collate SQL_Latin1_General_CP1_CI_AS + '%';