【发布时间】:2017-04-25 18:50:42
【问题描述】:
为了说明,这里是 Postgres 9.6 中的一些表:
people
id | name
----+------
1 | a
2 | b
3 | c
4 | d
groups
id | name
----+-------
10 | xxx
20 | yyy
30 | zzz
people_in_group
person_id | group_id
----------+-------
1 | 10
2 | 10
我想在 people_in_group 中插入多个值,并将组名返回给我。我已经有了 person_id (2)。以下工作,但不返回名称。
INSERT INTO people_in_group(person_id, group_id)
SELECT '2' AS person_id, id as group_id FROM groups
WHERE name IN ('xxx', 'yyy', 'not there')
ON CONFLICT DO NOTHING
RETURNING *;
如果我将name 添加到SELECT 子句,我将得到INSERT has more expressions than target columns。有什么方法可以让组表中的name 返回给我(通过RETURNING 子句)?我知道我传入了组名,但是上面的查询将无法插入“xxx”(重复键)和“不存在”(没有这样的组),所以它只会返回“yyy”。理想情况下,我想知道某些INSERTs 失败的原因,但我会尽我所能。
【问题讨论】:
标签: postgresql sql-insert bulkinsert sql-returning