sql - 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 个不同的数据数组进行连接并且不删除现有数据。
我该怎么做?
解决方案
是否要插入不存在的行?如果是这样:
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;
推荐阅读
- wordpress - 从模板代码访问简码参数
- django - Django 中主键的重复条目 - 我如何在 Django 中进行 upsert?
- python - 如何在 python 中的 groupby 上运行更复杂的聚合函数
- django - 需要帮助制定查询
- fiware-orion - CEF Context Broker 上多租户模式下的统计信息
- laravel - 为什么 Laravel 在我的 URL 末尾添加片段“#/”?
- python - 从 json 在 pandas 中创建一个表
- typescript - 如何处理 typeorm 实体中的依赖前插入
- javascript - 为什么 setTimeout() 不起作用?
- python - 模板变体标题未显示