我找不到任何关于这方面的足够好的文档,所以我只是想问问Stackoverflow的公民。
假设我有以下SQL查询:
INSERT INTO PUBLIC.TABLE_A (id, user, active, last_login) --The ID column is the primary key
SELECT
b.id, b.user, b.active, b.last_login
FROM
PUBLIC.TABLE_B as B
ON CONFLICT ON CONSTRAINT ID_PKEY
DO UPDATE
user = excluded.user,
active = excluded.active,
last_login = excluded.last_login
问题1)user, active, and last_login come from PUBLIC.TABLE_A
,对吗?
问题2)excluded.user, excluded.active, excluded.last_login
来自PUBLIC.TABLE_B
的准确记录是正确的吗?
您的语法不正确,应该是ON CONFLICT ... DO UPDATESET"user" = EXCLUDED."user"
。
SET
指向答案的方向,因为它就像UPDATE
语句中的SET
。是的,=
左边的列(不能用表名限定)是要更新的表的列,在您的例子中是public.table_a
。
伪表EXCLUDED
指定您最初试图插入的行,但由于冲突而被拒绝。在您的例子中,这是public.table_b
中的一行。