首页 > 解决方案 > sql连接多个值列表

问题描述

我有一个带有复合 ID 的 sql Postgres 表,如果数据不存在,我想在该表上填充广泛的值。我有一张桌子

CREATE TABLE MyTable (
idCol1              VARCHAR(256) NOT NULL,
idCol2              VARCHAR(256) NOT NULL,
idCol3              VARCHAR(256) NOT NULL,
amount              VARCHAR(256) NOT NULL,
)

对于 ['A','B','C'] 中 idCol1 的所有值,['D','E','F'] 中的 idCol2,['G','H',' 中的 idCol3 I'] 如果该行不存在,我想设置一个金额值。

问题是 idCol1、idCol2 和 idCol3 不是外键,它们的值不在任何表中。我必须将它们直接填充到 sql 查询中。

我很难编写一个同时插入数据的请求,对 3 个不同的数据数组进行连接并且不删除现有数据。

我该怎么做?

标签: sqlpostgresql

解决方案


是否要插入不存在的行?如果是这样:

insert into mytable (idcol1, idcol2, idcol3, amount)
    select i1.idcol1, i2.idcol2, i3.idcol3, 0 as amount
    from (values ('A'), ('B'), ('C')) i1(idcol1) CROSS JOIN
         (values ('D'), ('E'), ('F')) i2(idcol2) CROSS JOIN
         (values ('G'), ('H'), ('I')) i3(idcol3) LEFT JOIN
         mytable t
         USING (idcol1, idcol2, idcol3)
    where t.idcol1 IS NULL;

推荐阅读