首页 > 解决方案 > 试图匹配 PostgreSQL 中两个不同表中的两个地址列。想不通

问题描述

这是非常基本的。我有一个名为“AddressPrimary”的表,其中包含一个城市的 500,000 个地址,并且包含所有这些地址。有三列,“id”、“address”和“rentalPrice”。租金价格目前为空,因为我正在尝试获取这些地址的租金价格。

然后,我有一个名为“AddressSecondary”的新表,其中包含 1,000 个具有租金价格的地址。它有三列,“id”、“unmatchedAddress”、“rentalPriceGood”。

这 1,000 个地址与“AddressPrimary”中的格式或拼写不同。因此,我不能只将这些租金价格上传到正确的地址。如何执行快速 SQL 将 1,000 个地址与 500,000 个地址进行比较以获得最佳匹配百分比,以便输出为

"Id from AddressPrimary", "address", "umatchedAddress", "rentalPriceGood",

这样我就可以导出到 CSV,看看“地址”是否真的等于“unmatchedAddress”,然后我可以将这 1,000 个属性的租金价格上传到 Postgres。

有什么建议么。我在网上阅读了许多线程并尝试这样做,但它不会产生我想要的。

谢谢。

标签: sqlpostgresql

解决方案


您可以使用pg_trgm<->中的or%运算符。有很多方法可以制定这个,不清楚你想要什么。您可以在某个截止值内查找所有匹配项(使用条件连接),或者在 AddressPrimary 中为每个 AddressSecondary 找到最接近的匹配项(在with中使用横向连接),或者找到最接近的匹配项,但前提是它也在 a某些截止(将两者与WHERE 和ORDER BY 结合,这可能对性能很重要)。%<->ORDER BYLIMIT 1%<->

<-> 的简单情况是:

select *, address <-> unmatchedAddress 
from AddressSecondary cross join lateral (
    select * from AddressPrimary order by address <-> unmatchedAddress limit 1
) as foo

您可能还想尝试特定领域的地址标准化软件。我认为 USPS 会发布其中的一些内容。


推荐阅读