The naive way to do this that comes to mind would be as follows:
SELECT name, lev FROM
(SELECT name, levenshtein(name, *parameter*) as lev FROM my_table)
WHERE
lev = (SELECT MIN(lev) FROM
(SELECT name, levenshtein(name, *parameter*) as lev FROM my_table ));
However, the "(SELECT name, levenshtein (name, parameter) as lev FROM my_table)" subquery, which is very expensive (huge table), is repeated twice, which seems terribly inefficient.
I can somehow write:
SELECT name, lev FROM
(SELECT name, levenshtein(name, *parameter*) as lev FROM my_table) as my_temp_table
WHERE
lev = (SELECT MIN(lev) FROM my_temp_table);
But that does not work.
Is there an easy way to optimize this query for speed? Am I missing something obvious?
Should I rely on temporary tables? (trying to avoid this due to overhead / complexity as they don't seem suitable for very frequent / concurrent requests)
Any input from SQL ninjas is welcome;)