有没有一种方法可以在PostgreSQL中以不同的方式一次更新/修改多行?

我在PostgreSQL中有两个表,每天都收到传入的CSV,其中包含新信息。作为参考,这是一个健身房,因此每个人都可以拥有ID,地址,成员资格终止时的时间等。

所以我有一个表成员资格,其中包含所有这些元数据。每次输入CSV时,我都想添加新成员行并更改现有成员的任何已更改元数据。

同时,我想将所有这些更改记录在单独的“操作”表中。

所以说我有

John,33,1234 A St,Anchorage,AK,555-555-5555 

这进入我的主“成员资格”表,并且也作为“新”进入“动作”表。

如果第二天John由于某种原因发送了地址更改,则memberships表将更新为

John,6789 B St,555-555-5555

未创建新行。在动作表中,将创建一个新行,其中包含约翰的member ID(序列PK)和空值(地址值除外),该行现在显示6789 B St和动作Updated

我想知道是否可以同时批量输入信息(例如,我有10位成员都需要以不同的方式更新元数据,一个改变了她的电话号码,另一个改变了他的地址) 。我知道我可以一一完成所有这一切,但这似乎很昂贵,所以我想知道是否有办法在更少的查询中做到这一点

如果我有300行进行了修改,我可以一次完成所有操作,还是必须一次执行一行?

在Google上搜索WHILEIF似乎有些问题,但我也只是想知道我是否在正确的轨道上,因为我找不到谷歌搜索这个特定答案的解决方案。似乎可以进行批量插入和删除(如果它们都是新的,或者它们全部都被删除了),但我不知道修改可能不一样(也许有些是新的,有些是需要修改,有些需要删除。)

感谢您的帮助!

h286700143game 回答:有没有一种方法可以在PostgreSQL中以不同的方式一次更新/修改多行?

在SQL中,如果您想同时进行多项操作,最快的方法是联接并选择NOT While。循环在SQL中是不好的。

由于您需要在SQL中进行联接,因此需要在表中拥有要使用的数据。通常,这是通过“登台表”完成的。这些表是放置新数据的表,然后可以在将它们放入系统时进行合并。

例如,在您的情况下,将300个登台成员信息放置在stage_memeber表中,然后您可以通过加入该表来运行主表的更新。这将是一个查询和更新语句。

然后您可以离开联接以查找不存在的项目,并将其提供给instert语句-再次进行单个查询。

有时您可能需要将登台数据放入存档的审计表中,以便了解过去所做的事情。或者,您可以根据登台表中的内容来汇总数据并将其写入审核系统,然后再清除数据以进行下一次加载。

通过在流行的搜索网站上搜索ETL(提取转换负载)或“从暂存表加载数据”,您应该能够找到有关该领域领先实践的更多信息。

本文链接:https://www.f2er.com/3163508.html

大家都在问