我想从包含在三个不同表格中的数据导出一个 csv 格式的报告。我使用一张表中的数据制作了一张临时表。然后我的想法是使用两个 JOIN 添加其他数据,然后一旦临时表填写完毕,使用 COPY 将其导出,然后删除该表。
Table1
-id (primary key)
-data1
-data2 (foreign key for Table2)
-data3
Table2
-id (primary key, Table1.data2 matches with this)
-data1 (foreign key for Table3)
-data2
Table3
-id (primary key, Table2.data1 matches with this)
-data1
最终的统一表格如下:
-id
-table1.data1
-table1.data2
-table1.data3
-table2.data1
-table2.data2
-table3.data1
首先,我使用表 1 中需要的信息创建了一个临时表,因为该表包含报告的大部分信息。
Database=# create temp table temp_table as select id,data1,data2,data3 from table1;
SELECT 71
使用选择显示了这个新表中的数据。
接下来,我尝试使用 JOIN 将所有数据从 Table2 连接到 Table1,使用匹配的键。
Database=# select * from table2 join temp_table on table2.id = temp_table.data2;
结果控制台输出显示成功!它按预期列出了这个组合表。但是,当在临时表上使用全选语句时,它只显示填充它的初始数据字段。它不包括 Table2 中的数据,就像我在控制台输出中显示的那样。在 table2 上快速全选显示没有变化,所以我没有翻转它们并意外地将 temp_table 复制到 table2。我想我可能误解了 JOIN 命令或它们的正确使用方式。 我对 SQL 还是很陌生,我已经诚实地尝试寻找解决方案,但我发现似乎没有任何相关或有用的东西。任何帮助将不胜感激,我想学习任何解释也将不胜感激:) 非常感谢
编辑: 样本数据
table1
id formalID linkid textdata
3 3 3 [blank]
9 13 9 [blank]
1 1 10 [blank]
35 38 [blank] “sample text”
table2
id nameid typetext
3 3 [blank]
9 9 “Alpha”
10 1 “Beta”
table3
id nameText
3 “Sweet”
9 “Sour”
1 “Tangy”
end result:
formalID nameText typeText textdata
3 “Sweet” [blank] [blank]
13 “Sour” “Alpha” [blank]
1 “Tangy” “Beta” [blank]
38 [blank] [blank] “sample text”
linkid 将是我最初发布的 table1.data2,与 table2.id 相同,nameid 将是 table2.data1,与 table3.id 相同 条目可能在其他两个中没有数据,在这种情况下,它们包含“文本数据”中的条目,但仍应包含在最终结果中。
最佳答案
下面应该输出你所有的数据:
SELECT t1.data1, t1.data3, t2.data2 as t2_data, t3.data1 as t3_data
FROM Table1 t1 LEFT JOIN Table2 t2 ON t1.data2 = t2.id
LEFT JOIN Table3 t3 ON t2.data1 = t3.id
关于sql - 使用 JOIN 将多个表的数据合并到一个统一的表中进行导出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57298285/