首页 > 解决方案 > 比较两个表中的列并在 PostgreSQL 中合并值

问题描述

我得到两个表共享一些列名,并且行有些相似。我需要一种方法来比较行条目并将值从一个表插入到另一个表中以匹配一列中的行。描述我的问题的示例如下所示:

big table                    |small table
-------------------------    |---------------------------
customer |address|           | customer       |address |
------------------------ |   |------------------------------
John     |123 Road       |   |customer John   |123 Road
Jason    |234 Dr         |   |shopper Jack    |645 Pkway
Jack     |Null           |   |customer Jones  |789 Road
Jones    |Null           |

可以看作是大表的数据源,它们包含相同的列名。我尝试过加入方法,但该方法不太适合。不同的命名约定会导致问题。在这种情况下,大表中的名称包含在customer中的名称中。我想在上面的例子中实现的是,小中的地址可以插入到大表中的地址中。我希望我的描述足够清楚。谢谢你。customershopper Jackcustomer JonesJackJones

标签: postgresql

解决方案


使用更新...从大表客户的位置在小表客户中。

 update big_table bt
     set address = sm.address
   from small_table sm
  where bt.address is null 
    and position(bt.customer in sm.customer) > 0;

但要格外小心,这不是一个好习惯。将小表客户拆分为 2 列会更好。您还需要解决当两者都有客户地址但它们不同时会发生什么。以及多个同名客户。


推荐阅读