sql - 使用 JOIN 将多个表的数据合并到一个统一的表中进行导出

标签 sql postgresql

我想从包含在三个不同表格中的数据导出一个 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/

相关文章:

postgresql - 为什么我们需要像 RabbitMQ 这样的消息代理而不是像 PostgreSQL 这样的数据库?

sql - 在 Postgresql 中获取星期几

mysql - 如何分离字符串并重新构建它

sql - 如何使用 select 语句的结果更新表中的列,该语句使用正在更新的行作为 where 子句的一部分?

php - Mysql 查询选择具有不同列值的结果

sql - 简单的 psql 计数查询

postgresql - 用于提供外部 postgreSQL 数据库的 Drupal 数据模块

Postgresql - 选择 'votes' 的计数,但只包括最新的

PHP - 如何在 mysql 中增加多个选定的列?

mysql - SQL外键错误?