2

次の内容のテーブルがあります。

ID | Name | Alias

1 | William | Will,Willo,Wolli

ユーザーが指定した文字列のレーベンシュタイン距離 (またはメタフォン、それは問題ではありません) が、ユーザー名または既知のエイリアスのいずれかに対して定義されたしきい値よりも低い場合、行 ID を返したいと思います。

解決策として、ユーザー ID とユーザー エイリアスをリンクする追加のテーブルを使用することが考えられますが、できれば避けたいと思っています。

4

2 に答える 2

3

必要なのは、文字列の分割/展開です。次のように実行できます。

SELECT DISTINCT u.id FROM users AS u LEFT JOIN
(SELECT u.id,unnest(string_to_array(u.alias, ',')) AS ALIAS FROM users AS u) AS q
ON u.id=q.id
WHERE levenshtein(u.name,'Jill')<3
OR levenshtein(q.ALIAS,'Jill')<3;   

http://sqlfiddle.com/#!12/494e6/5

于 2013-03-11T20:37:27.667 に答える
2

いつものように、解決策は複数あります。

select  u.id
from    users u
where   3 >
any
(
    select  levenshtein ( 'Willey'::text, a )
    from    regexp_split_to_table
        (
            concat_ws ( ',' , u.name::text , u.alias::text )
        ,   ','
        ) as a
)
于 2013-03-11T22:10:35.373 に答える