我的数据库是从一些彼此相似并共享相同列名的表构建的。原因是为了对来自每个资源的数据进行比较。
table_A and table_B: id, product_id, capacitor_name, ressitance
很容易通过product_id
连接表并查看比较,但是我需要比较product_id
之间的数据,如果存在于两个表中,如果不是,我想通过名称相似性进行比较,如果相似性限制了最多3个结果的结果。
大多数情况下,名字是不相等的,这就是为什么我使用相似性。
SELECT * FROM table_a ta
JOIN table_b tb
ON
ta.product_id = tb.product_id
OR
similarity(ta.name,tb.name) > 0.8
很好。但问题是有时我得到的数据比我需要的多,我怎么限制它?(而且,为了得到相似度更高的名字,还要按相似度排序)。
如果希望从三元组索引中获益,则需要使用操作符形式(%),而不是函数形式。然后,您将在两个"列"上排序,第一列首先是精确匹配,第二列将最相似的匹配放在后面并按顺序排列。用LIMIT求极限。我假设你有一些WHERE条件将其限制为table_a的一行。如果不是,那么你的问题就不是很好。这个极限应该适用于什么?每个什么应该限制在3?
SELECT * FROM table_a ta
JOIN table_b tb
ON
ta.product_id = tb.product_id
OR
ta.name % tb.name
WHERE ta.id=$1
ORDER BY ta.product_id = tb.product_id desc, similarity(ta.name,tb.name) desc
LIMIT 3