【发布时间】:2017-03-31 11:45:58
【问题描述】:
给定以下结构:
表 A (aliases):
user_id | alias
---------------
1 john
2 peter
user_id 在users 中引用id。
表 B (users):
id | password_hash | ...
---------------------------
1 ... ...
2 ... ...
(想法是用户可以有多个别名,所有别名都指向同一个主用户帐户记录)
我想做以下操作:给定一个alias, password, ... 记录:
- 如果
aliases中存在alias,则更新users中对应的password - 如果
alias不存在,使用给定密码在users中创建一个新用户,并在aliases中插入一行指向这条新记录。
如何在 Postgres 的单个查询中做到这一点?
类似的东西
WITH (
INSERT INTO users(id, password, ...) VALUES(DEFAULT, password, ...) RETURNING id
)
INSERT INTO aliases(user_id, alias) VALUES(id, alias)
ON CONFLICT {delete the temp row in users and update the one with the
known user_id instead}
【问题讨论】:
标签: sql postgresql upsert