在我的查询结果中保留 MySQL 函数(在 WHERE 中使用)的结果

Keeping result of MySQL function (that gets used in WHERE) in my query results

我的数据库中有一个 MySQL 函数,它计算两个字符串之间的编辑距离。 levenstein("str1","str2"), returns INT

我有一个 table 填充的字符串,我希望我的查询 return 与输入字符串最相关的行(如果有的话)。我的查询如下所示:

SELECT * FROM my_table
WHERE levenshtein('John',name) <= 15
ORDER BY date DESC`

如您所见,WHERE 子句中使用了编辑距离。该函数本身工作正常。

但在我的结果中,我还希望有一个列,其中包含来自 "John" 的每一行的特定编辑距离。 它在 WHERE 子句中计算,我如何更改我的查询以实际存储它并让它与其余结果一起出现?

使用子查询,过滤结果:

SELECT name, score FROM (
  SELECT name, levenshtein('John', name) AS score, date
  FROM my_table
) AS t
WHERE t.score <= 15
ORDER BY date DESC

这会将函数的结果作为外部查询中的普通列提供,因此您可以根据它进行过滤、排序等。

您可以在字段列表中使用函数

SELECT *,levenshtein('John',name) as lev FROM my_table
HAVING lev <= 15
ORDER BY date DESC

这是说明该概念的 SQLFiddle:http://sqlfiddle.com/#!9/6274e2/2

您可以将计算放入您的选择中,为其命名,并在 having 子句中引用它:

SELECT
  *, levenshtein('John',name) as lev
FROM my_table
HAVING
  lev <= 15
ORDER BY
  date DESC;