多个值列表上的sql联接

多个值列表上的sql联接,sql,postgresql,Sql,Postgresql,我有一个带有复合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,

我有一个带有复合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'、'I']中的idCol3的所有值,如果行不存在,我想设置一个金额值

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

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


如何操作?

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

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;

与您的问题无关,但是:
varchar(256)
varchar(321)
varchar(258)
相比,在这些列中是否真的存储了逗号分隔的字符串,如
['a','B','C']
(包括方括号)?我的问题是我没有使用交叉连接,只有“,”才能做笛卡尔积。您的解决方案很有效,谢谢@萨博<代码>,是
交叉连接
。我强烈建议您使用
交叉连接
,因为它更清楚地显示了代码的意图。