postgresql 使用字符串相似性规则连接表sql限制

wkyowqbh  于 2022-12-12  发布在  PostgreSQL
关注(0)|答案(1)|浏览(175)

我的数据库是从一些彼此相似且共用相同数据行名称的数据表建立。原因是要在每个资源的数据之间执行比较。
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

它工作得很好。但问题是有时我得到的数据比我需要的要多,我该如何限制它呢?(此外,为了得到更高的相似性名称,按相似性排序)。

0aydgbwb

0aydgbwb1#

如果你想从三元组索引中获益,你需要使用运算符形式(%),而不是函数形式。然后您将对两个“列”排序,第一个列首先是完全匹配的列,第二个列将最相似的匹配放在后面并按顺序排列。然后使用LIMIT来进行限制。我假设您有一些WHERE条件来将其限制为table_a的一行。如果不是,那么你的问题就不是很好地组织了。2这个限制应该适用于什么?3每个 * 什么 * 应该限制在仅仅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

相关问题