在PostgreSQL中是否可以用不同的方式一次更新/修改多行?

问题描述 投票:0回答:1

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

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

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

所以说我有

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

这进入我的主要“成员资格”表,并作为“新”进入“操作”表。

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

John, 33, 6789 B St, Anchorage, AK, 555-555-5555

未创建新行。在动作表中,将创建一个新行,该行具有John的member ID(序列PK),并且除地址值(现在显示为6789 B St和动作Updated

之外)为空。

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

如果我有300行并进行了修改,我可以一次执行全部操作,还是必须一次执行一行?

[Google周围似乎似乎有WHILEIF的东西,但是我也只是想知道我是否在正确的轨道上,因为我无法找到针对此特定问题的解决方案到处搜寻。似乎可以进行批量插入和删除(如果它们都是新的,或者它们全部都被删除了),但我不知道修改可能不一样(也许有些是新的,有些是需要修改,有些需要删除)。

感谢您的帮助!

sql postgresql query-performance
1个回答
0
投票

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

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

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.