SELECT Name WHERE LevenshteinFunction ReturnValue> 80 AND也选择ReturnValue

时间:2014-03-04 13:48:45

标签: sql sql-server tsql select

我有以下SQL-Select语句:

SELECT [Name], 
       [No_] 
  FROM [Table] 
 WHERE dbo.fn_Levenshtein('Mobel Meller', [Name]) > 80
  • 然后我:姓名,否
  • 我想要什么:姓名,否,ReturnValue

我的解决方案如下,但由于性能的原因,我不想为每个记录两次调用该函数...还有其他方法可以做到这一点吗?

SELECT [Name], 
       [No_], 
       dbo.fn_Levenshtein('Mobel Meller', [Name]) 
  FROM [Table] 
 WHERE dbo.fn_Levenshtein('Mobel Meller', [Name]) > 80

编辑:如果它确实运行了两次,我就不是真的。而且也不是如何检查。

Edit2 :我的第二个声明的执行计划:Execution Plan 但我无法阅读这个ExecutionPlan ..那么它是否会运行两次?

3 个答案:

答案 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