我有以下SQL-Select语句:
SELECT [Name],
[No_]
FROM [Table]
WHERE dbo.fn_Levenshtein('Mobel Meller', [Name]) > 80
我的解决方案如下,但由于性能的原因,我不想为每个记录两次调用该函数...还有其他方法可以做到这一点吗?
SELECT [Name],
[No_],
dbo.fn_Levenshtein('Mobel Meller', [Name])
FROM [Table]
WHERE dbo.fn_Levenshtein('Mobel Meller', [Name]) > 80
编辑:如果它确实运行了两次,我就不是真的。而且也不是如何检查。
Edit2 :我的第二个声明的执行计划: 但我无法阅读这个ExecutionPlan ..那么它是否会运行两次?
答案 0 :(得分:2)
要扩展我的评论,以下是您的查询的CTE版本......
WITH Result ([Name], [No_], [Distance]) AS (
SELECT [Name],
[No_],
dbo.fn_Levenshtein('Mobel Meller', [Name])
FROM [Table]
)
SELECT *
FROM Result
WHERE [Distance] > 80
改编自答案here。我特别喜欢这样的观点,即即使只是在CTE版本感觉更加可维护的情况下才会运行。
答案 1 :(得分:1)
试试这个
SELECT tb.Name,
tb.[No_],
Result
FROM [Table] tb
CROSS APPLY dbo.fn_Levenshtein('Mobel Meller', tb.[Name]) AS Result
WHERE Result > 80;
答案 2 :(得分:-1)
SELECT * FROM
(
SELECT [Name],
[No_],
dbo.fn_Levenshtein('Mobel Meller', [Name]) as [rtnval]
FROM [Table]
) as RTNTBL
WHERE [rtnval] > 80