将 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 + '%';
我在一个客户中有名字的结果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 + '%';