SQL 在时间戳上连接两个不同的表
SQL join two different tables on timestamp
请原谅格式不佳,我会尽量保持清楚:
Table一个
|---------------------|------------------|--------------|
| col1 | col2 | datetime |
|---------------------|------------------|--------------|
Table B
|---------------------|------------------|--------------|
| col3 | col4 | datetime |
|---------------------|------------------|--------------|
我正在寻找的输出是这样的
|---------------------|------------------|--------------|-----------|---------------|
| col1 | col2 | col3 | col4 | datetime |
|---------------------|------------------|--------------|-----------|---------------|
基本上,日期时间列应该是键并且应该包含两个表中的所有值(没有重复项),并且在表中找到的相应值应该出现在每个时间戳(或 NULL 时有 none )
我试过使用 FULL OUTER JOIN,但它似乎跳过了一些日期时间:
SELECT T1.col1, T1.col2, T2.col3, T2.col4, T1.datetime
FROM T1 FULL OUTER JOIN T2 on T1.datetime=T2.datetime;
我也试过在右连接子查询上使用左连接,但还是不行。
我觉得这应该有一个简单的解决方案。我错过了什么吗?
谢谢!
很可能,它不是“跳过”日期时间值。相反,它们显示为 NULL
。您可以使用 coalesce()
:
来解决这个问题
SELECT T1.col1, T1.col2, T2.col3, T2.col4,
COALESCE(T1.datetime, T2.datetime) as datetime
FROM T1 FULL OUTER JOIN
T2
ON T1.datetime = T2.datetime;
大多数支持 FULL JOIN
的数据库也支持标准的 USING
子句,因此您也可以将其表示为:
SELECT T1.col1, T1.col2, T2.col3, T2.col4,
datetime
FROM T1 FULL OUTER JOIN
T2
USING (datetime);
请原谅格式不佳,我会尽量保持清楚:
Table一个
|---------------------|------------------|--------------|
| col1 | col2 | datetime |
|---------------------|------------------|--------------|
Table B
|---------------------|------------------|--------------|
| col3 | col4 | datetime |
|---------------------|------------------|--------------|
我正在寻找的输出是这样的
|---------------------|------------------|--------------|-----------|---------------|
| col1 | col2 | col3 | col4 | datetime |
|---------------------|------------------|--------------|-----------|---------------|
基本上,日期时间列应该是键并且应该包含两个表中的所有值(没有重复项),并且在表中找到的相应值应该出现在每个时间戳(或 NULL 时有 none )
我试过使用 FULL OUTER JOIN,但它似乎跳过了一些日期时间:
SELECT T1.col1, T1.col2, T2.col3, T2.col4, T1.datetime
FROM T1 FULL OUTER JOIN T2 on T1.datetime=T2.datetime;
我也试过在右连接子查询上使用左连接,但还是不行。
我觉得这应该有一个简单的解决方案。我错过了什么吗?
谢谢!
很可能,它不是“跳过”日期时间值。相反,它们显示为 NULL
。您可以使用 coalesce()
:
SELECT T1.col1, T1.col2, T2.col3, T2.col4,
COALESCE(T1.datetime, T2.datetime) as datetime
FROM T1 FULL OUTER JOIN
T2
ON T1.datetime = T2.datetime;
大多数支持 FULL JOIN
的数据库也支持标准的 USING
子句,因此您也可以将其表示为:
SELECT T1.col1, T1.col2, T2.col3, T2.col4,
datetime
FROM T1 FULL OUTER JOIN
T2
USING (datetime);