【问题标题】:Combine multiple Full Outer Join queries in one query and make ON check on several tables将多个完全外连接查询合并到一个查询中,并对多个表进行 ON 检查
【发布时间】:2021-06-01 13:22:00
【问题描述】:

我对使用 SQL(在我的例子中是 Postgres)很陌生,在一个查询中加入多个表时遇到问题。我正在使用FULL OUTER JOIN 命令来解决我的问题,但是当表 2 和表 3 共享相同的时间时,它们不会组合在一行中,而是创建具有相同时间戳的两行。

我有三个表,每个表都有一个时间和一个数据列:

time | data1
12:01  5 
12:04  7
12:06  6

time | data2
12:02  3 
12:03  4
12:05  9

time | data3
12:01  5 
12:04  7
12:05  9

我想要的输出是这样的:

time | data1 | data2 | data3
12:01  5       NaN     5
12:02  NaN     3       NaN
12:03  NaN     4       NaN
12:04  7       NaN     7
12:05  NaN     9       9
12:06  6       NaN     NaN

这是我目前得到的,注意一些时间戳是如何加倍的,因为没有检查data2.time=data3.time,只有data1.time=data2.timedata1.time=data3.time

time | data1 | data2 | data3
12:01  5       NaN     5
12:02  NaN     3       NaN
12:03  NaN     4       NaN
12:04  7       NaN     7
12:05  NaN     9       NaN
12:05  NaN     NaN     9
12:06  6       NaN     NaN

请特别注意,在某些情况下,表 1 和表 2 共享相同的时间,而我想合并行,而在某些情况下,表 2 和表 3 的时间相同,在这种情况下,我也想合并行。 但是我需要在一个查询中进行加入,那么如何将ON table1.time=table2.time 中的这些案例与table2.time=table3.time 结合起来

【问题讨论】:

  • 使用FULL OUTER JOIN
  • 这就是我正在使用的,但是当组合几个连接时,我看不到如何组合不同表的时间 = 时间检查......很难描述我想要做什么说

标签: sql postgresql join


【解决方案1】:

你想要full join:

select time, t1.data1, t2.data2, t3.data3
from table1 t1 full join
     table2 t2
     using (time) full join
     table3 t3
     using (time);

Here 是一个 dbfiddle。

【讨论】:

  • 这是否也将 data2 的时间与 data3 的时间进行比较,而不仅仅是与 data1 的时间?
  • 对不起,如果我听起来很愚蠢,但使用的是实际的 Postgres 命令吗?因为当我像你说的那样写它时,我只会遇到语法错误
  • @kartoffelbär。 . .这正是您的问题所要求的。它在 Postgres 中运行良好;我添加了一个 dbfiddle.
  • 您真是太好了,感谢您的 db 小提琴和一般的回答者!我明天将对此进行测试,但这似乎很有希望,好像我在实施您的解决方案时犯了一个错误。再次感谢
猜你喜欢
  • 2015-02-02
  • 2016-02-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-02
  • 1970-01-01
  • 1970-01-01
  • 2012-07-09
相关资源
最近更新 更多