PostgreSQL 多个pg_trgm相似度得分子查询
PostgreSQL multiple pg_trgm similarity score sub-query
我是 SQL 的新手,我正在努力处理子查询。我有一个看起来像这样的 table:
sss | mm | sid
------------------+----+-----
IBM LTD | | 003
I.B.M. | | 003
A.BM LTD | | 004
IMB LTD | | 004
IMB UK | | 005
IBMUK LTD | | 006
IBMUKLTD | | 007
IBM LIMITED | | 008
IBM U.K. | | 008
IBM U.K. LIMITED | | 009
I.B.M UK LTD | 1 | 001
IBM | 1 | 001
IBM UK | 1 | 001
IBM UK LTD | 1 | 001
mm
列中带1
的行是手动匹配的行,ID正确。我想使用 similarity
函数尝试找到与已手动匹配的记录的接近匹配项。
我知道通常你会在 from 语句中放置一个子查询,但我不能用 similarity
函数这样做,但我不知道该怎么做,这就是我想做:
SELECT
sss,
similarity(sss, select(sss from tusm where mm = 1) as match_score)
from
tusm
where
mm is null and
where match_score >= 0.5
;
你这里有一些问题。您不能在 where 子句中使用列别名,您试图在括号的错误一侧分配列别名,您不能将集合提供给 similarity
的第二个参数,并且您已经通常只是在几个地方破坏了语法。
为了克服similarity
无法处理集合,做一个自连接:
select a.sss as a_sss, b.sss as b_sss, similarity(a.sss, b.sss) as score from
tusm a, tusm b
where a.mm is null and b.mm = 1 and
similarity(a.sss, b.sss) > 0.5;
给予
a_sss | b_sss | score
-----------+------------+----------
IBM LTD | IBM UK LTD | 0.727273
IBMUK LTD | IBM UK LTD | 0.615385
如果 table 变大,将很难使它表现良好。
我是 SQL 的新手,我正在努力处理子查询。我有一个看起来像这样的 table:
sss | mm | sid
------------------+----+-----
IBM LTD | | 003
I.B.M. | | 003
A.BM LTD | | 004
IMB LTD | | 004
IMB UK | | 005
IBMUK LTD | | 006
IBMUKLTD | | 007
IBM LIMITED | | 008
IBM U.K. | | 008
IBM U.K. LIMITED | | 009
I.B.M UK LTD | 1 | 001
IBM | 1 | 001
IBM UK | 1 | 001
IBM UK LTD | 1 | 001
mm
列中带1
的行是手动匹配的行,ID正确。我想使用 similarity
函数尝试找到与已手动匹配的记录的接近匹配项。
我知道通常你会在 from 语句中放置一个子查询,但我不能用 similarity
函数这样做,但我不知道该怎么做,这就是我想做:
SELECT
sss,
similarity(sss, select(sss from tusm where mm = 1) as match_score)
from
tusm
where
mm is null and
where match_score >= 0.5
;
你这里有一些问题。您不能在 where 子句中使用列别名,您试图在括号的错误一侧分配列别名,您不能将集合提供给 similarity
的第二个参数,并且您已经通常只是在几个地方破坏了语法。
为了克服similarity
无法处理集合,做一个自连接:
select a.sss as a_sss, b.sss as b_sss, similarity(a.sss, b.sss) as score from
tusm a, tusm b
where a.mm is null and b.mm = 1 and
similarity(a.sss, b.sss) > 0.5;
给予
a_sss | b_sss | score
-----------+------------+----------
IBM LTD | IBM UK LTD | 0.727273
IBMUK LTD | IBM UK LTD | 0.615385
如果 table 变大,将很难使它表现良好。