比较两个表中的列并在PostgreSQL中合并值

时间:2019-11-20 04:53:24

标签: 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           |

小表可以视为大表的数据源,它们包含相同的列名。我尝试了 join 方法,但是该方法不太适合。不同的命名约定会引起问题。在这种情况下,小表中的customer名称中包含的大表中的customer个名称。在上述示例中,我想实现的是可以将小表中的shopper Jackcustomer Jones的地址插入Jack和{{ 1}}在大表中。 我希望我的描述足够清楚。谢谢。

1 个答案:

答案 0 :(得分:0)

使用Update ...从大表客户的位置开始,在小表客户中。

 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列会更好。您还需要解决两个都有客户地址但又不同的情况。和多个同名客户。