Наивный способ сделать это, который приходит на ум, будет:
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 ));
Однако подзапрос "(SELECT name, levenshtein (name, параметр ) as lev FROM my_table)", который очень дорогой (огромная таблица), повторяется дважды, что кажется ужасно неэффективным.
Я как-то хоть ты мог написать:
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);
Но, похоже, это не работает.
Есть ли чистый способ оптимизировать этот запрос по скорости? Я что-то упустил очевидное?
Должен ли я полагаться на временные таблицы?
(пытаясь избежать этого из-за издержек / сложности, так как они не подходят для очень частых / одновременных запросов)
Любой вклад из ниндзя SQL будет принята с благодарностью;)