sql - 试图匹配 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。
有什么建议么。我在网上阅读了许多线程并尝试这样做,但它不会产生我想要的。
谢谢。
解决方案
您可以使用pg_trgm<->
中的or%
运算符。有很多方法可以制定这个,不清楚你想要什么。您可以在某个截止值内查找所有匹配项(使用条件连接),或者在 AddressPrimary 中为每个 AddressSecondary 找到最接近的匹配项(在with中使用横向连接),或者找到最接近的匹配项,但前提是它也在 a某些截止(将两者与WHERE 和ORDER BY 结合,这可能对性能很重要)。%
<->
ORDER BY
LIMIT 1
%
<->
<-> 的简单情况是:
select *, address <-> unmatchedAddress
from AddressSecondary cross join lateral (
select * from AddressPrimary order by address <-> unmatchedAddress limit 1
) as foo
您可能还想尝试特定领域的地址标准化软件。我认为 USPS 会发布其中的一些内容。
推荐阅读
- javascript - 对象值的总和数组
- bash - 如何说 shell 脚本在给定的时间范围内运行?
- linux - 如何在 git(不是 github)中创建新的用户帐户?
- php - 多个数据集到谷歌图表
- mysql - 如何在 WordPress 中加入空的用户元?
- android - 列表未添加到android中的arraylist
- ios - 显示 Invalid Binary Xcode 11 beta 6 的 iOS 应用
- typescript - 抑制打字稿编译中的 ERRNO 2 错误
- ionic-framework - 是否有任何离子代码可以使用 ionic 3 在蓝牙打印机上打印条码
- r - 从 mutate 中的符号创建列(整洁的评估)