Sql 如何在使用子查询(Postgres)中的数据时向上插入

Sql 如何在使用子查询(Postgres)中的数据时向上插入,sql,postgresql,subquery,upsert,Sql,Postgresql,Subquery,Upsert,我有两张桌子: 赋值{recceptacleId,assignedCarrier} rls_权限{receptacleId,rlsUserId} 在这种情况下,分配是指容器与航空公司之间的任何关系 每当一个新的分配进入分配表时,我想在插入新行时向上插入,或者在现有的插座被分配给新的航空公司my rls_permissions表时更新 upsert的问题,特别是约束冲突问题,是insert语句包含要插入的数据的子查询,因此我不确定如何编写语句的DO UPDATE集合部分 我已尝试使用“exclud

我有两张桌子:

赋值{recceptacleId,assignedCarrier} rls_权限{receptacleId,rlsUserId} 在这种情况下,分配是指容器与航空公司之间的任何关系

每当一个新的分配进入分配表时,我想在插入新行时向上插入,或者在现有的插座被分配给新的航空公司my rls_permissions表时更新

upsert的问题,特别是约束冲突问题,是insert语句包含要插入的数据的子查询,因此我不确定如何编写语句的DO UPDATE集合部分

我已尝试使用“excluded”来尝试并根据以前的冲突挑出要更新的assignedCarrier,但我一直收到错误:column excluded.receptacleId不存在

我的pkey看起来像这样:

CREATE UNIQUE INDEX rls_permissions_pkey ON rls_permissions("receptacleId" text_ops);
虚拟数据可以是:

接收方ID分配的载体 aaaaaaaaaaaaaa00 AA 美国航空公司在哪里

插入rls_权限接收器ID,rlsUserId 选择不同的分配。receptacleId,assignments.assignedCarrier 来自作业 关于约束rls_权限的冲突 DO UPDATE SET rlsUserId=选择不同的分配。分配的承运人 来自作业 其中assignments.receptacleId=excluded.receptacleId; 例外的结果是,如果没有冲突,则从子查询返回的数据将插入到权限表的新行中


如果有冲突,我只想更新新分配的承运商,而不更新或插入新行,因为该插座已经存在。

更新部分不需要子查询。可以通过excluded关键字访问插入零件的值


对excluded.rlsUserId的引用引用是指本应插入列rlsUserId中的值,因此它是通过SELECT语句中的assignments.assignedCarrier检索到的值。

您应该真正避免使用那些可怕的带引号的标识符。从长远来看,他们的麻烦远比他们值得的多。非常感谢你!我误解了排斥是如何起作用的。
INSERT INTO rls_permissions ("receptacleId","rlsUserId") 
SELECT DISTINCT assignments."receptacleId", assignments."assignedCarrier" 
FROM assignments
ON CONFLICT ON CONSTRAINT rls_permissions_pkey
DO UPDATE SET "rlsUserId" = excluded."rlsUserId";