sql - 根据其他表中的列更新表,并发生冲突
问题描述
我在 Postgres 数据库中有两个表。
表 A
用户 | 数量 |
---|---|
麦克风 | 100 |
鲍勃 | 200 |
爱丽丝 | 50 |
表 B
团体 | 用户 | 数量 |
---|---|---|
高手 | 麦克风 | 10 |
测试版 | 麦克风 | 15 |
高手 | 鲍勃 | 2 |
欧米茄 | 鲍勃 | 15 |
欧米茄 | 爱丽丝 | 25 |
我想更新表 b 并设置数量等于表 a 的数量 * 0.5 加入用户名 WHERE 表 b 组 = xyz。如果表b中不存在用户,我需要使用组xyz,用户名,表a的数量* 0.5来创建它。
我在这里有点东西,但是当用户在 tableb 中不存在时它无法处理,我不确定它是否是 postgres 的正确语法。
update tablea
set quantity = tableb.quantity * 0.5
from tableb
where tablea.username = tableb.username
and tablea.group = ace
解决方案
TableB
首先,在表中为列"group"
和的组合添加一个唯一约束(如果它不存在)"user"
:
ALTER TABLE TableB ADD CONSTRAINT un_group_user UNIQUE("group", "user");
然后,您可以使用该INSERT
语句将用户 from 插入TableA
到子句TableB
中ON CONFLICT
,以便更新存在于 group 'xyz'
in的用户的行TableB
:
INSERT INTO TableB("group", "user", quantity)
SELECT 'xyz', "user", quantity / 2.0
FROM TableA
ON CONFLICT("group", "user") DO UPDATE SET
quantity = EXCLUDED.quantity;
请参阅演示。
推荐阅读
- postgresql-12 - 获取 postgresql 模式中所有表的 DDL
- excel - Excel:在编写枚举函数时遗漏了一些东西
- docker - Docker:按图像过滤容器,忽略标签,然后是图像
- jquery - 如何使用 VBA 单击基于 Java 的 Web 按钮?
- sharepoint - Power Apps SharePoint 日期字段未在按钮单击时更新
- html - 修复html打印内容垂直居中
- c - If the open() system call fails to complete, do we need to call close()?
- python - 如何结合配对图和三角形热图?
- javascript - 需要一些关于如何开始移植我的应用程序的提示
- sql-server - 网络核心实体框架中的迁移冲突