我对SQL很新,我正在努力解决子查询问题。我有一张看起来像这样的表:
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
1
列中mm
的行是已手动匹配且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
;
答案 0 :(得分:2)
这里有一些问题。你不能在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
如果表格变大,将很难使其表现良好。