gpt4 book ai didi

sql-server - 将 JOIN 语句与 CONTAINS 函数一起使用

转载 作者:行者123 更新时间:2023-12-03 02:45:12 26 4
gpt4 key购买 nike

在 SQL Server 数据库中,我有一个包含大量 INNER JOIN 语句的 View 。最后一个连接使用 LIKE 谓词,这就是它运行速度太慢的原因。查询如下:

SELECT *
FROM A INNER JOIN
B ON A.ID = B.ID INNER JOIN
C ON C.ID1 = B.ID1 INNER JOIN
...........................
X ON X.Name LIKE '%' + W.Name + '%' AND
LIKE '%' + W.Name2 + '%' AND
LIKE '%' + W.Name3 + '%'

我想使用 CONTAINS 而不是 LIKE:

SELECT *
FROM A INNER JOIN
B ON A.ID = B.ID INNER JOIN
C ON C.ID1 = B.ID1 INNER JOIN
...........................
X ON CONTAINS(X.Name, W.Name) AND
CONTAINS(X.Name, W.Name2) AND
CONTAINS(X.Name, W.Name3)

我知道 CONTAINS 的工作速度比 LIKE 快,而且不能在 JOIN 语句中使用 CONTAINS。在这种情况下有什么解决方法或建议吗?提前致谢。

最佳答案

并不是说CONTAINS不能在连接中使用。

您不能使用列作为 CONTAINS 的第二个参数 - 请参阅 MSDN - CONTAINS (Transact-SQL)

CONTAINS
( { column_name | ( column_list ) | * }
,'<contains_search_condition>'
[ , LANGUAGE language_term ]
)

但是,您可以使用变量作为搜索条件,这样您就可以使用游标,然后获取您需要的所有数据。这是一些非常粗略的示例:

declare @Name nvarchar(max)

declare @Temp_A table(Name nvarchar(max))
declare @Temp_B table(Name nvarchar(max))

--=============================================================================================
insert into @Temp_A (Name)
select 'Test'

insert into @Temp_B (Name)
select 'aaaTestaaa'

--=============================================================================================
-- Query 1 - LIKE
--=============================================================================================
select *
from @Temp_A as A
inner join @Temp_B as B on B.Name like '%' + A.Name + '%'

--=============================================================================================
-- Query 2 - CONTAINS
--=============================================================================================
declare table_cursor cursor local fast_forward for
select distinct Name from @Temp_A
open table_cursor
while 1 = 1
begin
fetch table_cursor into @Name
if @@fetch_status <> 0 break

select * from @Temp_B where contains(Name, @Name)
end
close table_cursor
deallocate table_cursor

关于sql-server - 将 JOIN 语句与 CONTAINS 函数一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17448269/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com