在我的查询结果中保留 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;
我的数据库中有一个 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;