我已经很多年没用过 SQL 了,我显然已经生疏了。我有一种情况,我试图将多行插入表 A。要插入两列数据,第一列是“静态”值(它是派生的,但对于所有新行都是相同的)和第二个是表 B 上的 SELECT DISTINCT 的结果。对于此处应发挥作用的任何一个表都没有相关约束。
FWIW,这是 Retool 中针对 postgres 数据库的 sql 脚本。
为格式道歉。表格降价似乎对我不起作用
表 A最后应如下所示:
编号 | 源文件
富 | 苹果.csv
富 | 香蕉.csv
富 | 橙色.csv
基于表 B中的这些值
源文件
苹果.csv
苹果.csv
苹果.csv
香蕉.csv
香蕉.csv
橙色.csv
橙色.csv
我已经尝试了一些变化:
INSERT INTO table_A (id, source_file)
{{id}}, SELECT DISTINCT source_file
FROM table_B WHERE source_file IS NOT NULL AND source_file <> ''
哪个抛出syntax error at or near "$1"
和
INSERT INTO table_A (id, source_file)
SELECT DISTINCT {{id}}, source_file
FROM table_B WHERE source_file IS NOT NULL AND source_file <> ''
哪个抛出
insert or update on table "dg_client_data_sources" violates
foreign key constraint "fk_data_grid"
第二个错误让我想知道是否需要循环(喘气!)SELECT DISTINCT 的结果来插入多行?我可能想得太多了......
如果需要,我可以提供其他上下文/示例。非常感谢任何方向!
INSERT 将一组行作为输入。您可以使用 VALUES 创建一组行(可能只有一个):
但是,这要求您的选择结果最多为一行。更好的解决方案是将标量添加到选择中:
这里常量“foo”被添加到每一行。它有点类似于 select 和一个一列一行的表的叉积:
我添加了一个演示上述内容的小提琴