SQL 使用 MYSQL 连接来自多个表的数据
SQL join data from multiple tables with MYSQL
我有多个 table 和列字段,并且所有字段都匹配数据类型和列编号,并且所有字段都有一个时间字段,该字段也以 YYYY-MM-DD HH:MM:SS
的格式匹配。
数据问题
我可能有 tables,其中日期和时间戳与 table 的值列中的匹配值,但在另一个 table 中它会没有相同的日期和时间戳,因为每个 table 只记录从其他字段生成值的时间。
我的困境
我需要加入所有这些 table(大约 20 个),以便它们的时间和值字段显示每个 table 的每个值都有一个单独的名称。
我还需要显示每个条目的时间,但我只需要为所有条目设置一个时间字段,如果该时间的 table 中不存在其他值,则其他值为 Null。
例子Tables
Table一个
+---------------------+-------+
| Time | Value |
+---------------------+-------+
| 2016-12-11 00:00:15 | 15 |
| 2016-12-11 00:10:10 | 16 |
| 2016-12-11 00:12:00 | 17 |
+---------------------+-------+
Table B
+---------------------+-------+
| Time | Value |
+---------------------+-------+
| 2016-12-11 00:01:15 | 25 |
| 2016-12-11 00:11:10 | 26 |
| 2016-12-11 00:11:00 | 27 |
+---------------------+-------+
TableC
+---------------------+-------+
| Time | Value |
+---------------------+-------+
| 2016-12-11 00:02:15 | 35 |
| 2016-12-11 00:20:10 | 36 |
| 2016-12-11 00:21:00 | 37 |
+---------------------+-------+
预期结果
+---------------------+-----------+-----------+-----------+
| Time | Value_tba | Value_tbb | Value_tbc |
+---------------------+-----------+-----------+-----------+
| 2016-12-11 00:00:15 | 15 | Null | Null |
| 2016-12-11 00:10:10 | 16 | Null | Null |
| 2016-12-11 00:12:00 | 17 | Null | Null |
| 2016-12-11 00:01:15 | Null | 25 | Null |
| 2016-12-11 00:11:10 | Null | 26 | Null |
| 2016-12-11 00:11:00 | Null | 27 | Null |
| 2016-12-11 00:02:15 | Null | Null | 35 |
| 2016-12-11 00:20:10 | Null | Null | 36 |
| 2016-12-11 00:21:00 | Null | Null | 37 |
+---------------------+-----------+-----------+-----------+
我的解决方案有两个 Tables
如果我使用 MYSQL 是唯一或最简单的方法,使用左连接然后使用 UNION 或 UNION ALL 来按照我的预期进行填充,或者这甚至可以使用SQL 语句来得到这个结果?我在下面有一个例子,说明我正在使用两个 tables,但是当我需要在循环中抛出额外的 tables 时,我没有得到预期的结果。
这是我使用的两个 tables,这似乎能满足我的需要,但当我需要将其他 tables 添加到混音中时,这就是我的地方我很困惑将所有内容放入相同的 select 中并添加额外的 LEFT JOIN 或者如果我需要单独填充它们然后 UNION ALL.
SELECT a.Time, a.Value Value_tba, b.value Value_tbb
FROM TableA a
LEFT JOIN TableB b ON b.Time=a.Time
UNION ALL
SELECT b.Time, a.Value Value_tba, b.value Value_tbb
FROM TableB b
LEFT JOIN TableA a ON a.Time=b.Time
尝试以下操作:
select x.time, a.value as value_tba, b.value as value_tbb, c.value as value_tbc from (select time from a union select time from b union select time from c) x left join a on x.time = a.time left join b on x.time = b.time left join c on x.time = c.time
我有多个 table 和列字段,并且所有字段都匹配数据类型和列编号,并且所有字段都有一个时间字段,该字段也以 YYYY-MM-DD HH:MM:SS
的格式匹配。
数据问题
我可能有 tables,其中日期和时间戳与 table 的值列中的匹配值,但在另一个 table 中它会没有相同的日期和时间戳,因为每个 table 只记录从其他字段生成值的时间。
我的困境
我需要加入所有这些 table(大约 20 个),以便它们的时间和值字段显示每个 table 的每个值都有一个单独的名称。
我还需要显示每个条目的时间,但我只需要为所有条目设置一个时间字段,如果该时间的 table 中不存在其他值,则其他值为 Null。
例子Tables
Table一个
+---------------------+-------+
| Time | Value |
+---------------------+-------+
| 2016-12-11 00:00:15 | 15 |
| 2016-12-11 00:10:10 | 16 |
| 2016-12-11 00:12:00 | 17 |
+---------------------+-------+
Table B
+---------------------+-------+
| Time | Value |
+---------------------+-------+
| 2016-12-11 00:01:15 | 25 |
| 2016-12-11 00:11:10 | 26 |
| 2016-12-11 00:11:00 | 27 |
+---------------------+-------+
TableC
+---------------------+-------+
| Time | Value |
+---------------------+-------+
| 2016-12-11 00:02:15 | 35 |
| 2016-12-11 00:20:10 | 36 |
| 2016-12-11 00:21:00 | 37 |
+---------------------+-------+
预期结果
+---------------------+-----------+-----------+-----------+
| Time | Value_tba | Value_tbb | Value_tbc |
+---------------------+-----------+-----------+-----------+
| 2016-12-11 00:00:15 | 15 | Null | Null |
| 2016-12-11 00:10:10 | 16 | Null | Null |
| 2016-12-11 00:12:00 | 17 | Null | Null |
| 2016-12-11 00:01:15 | Null | 25 | Null |
| 2016-12-11 00:11:10 | Null | 26 | Null |
| 2016-12-11 00:11:00 | Null | 27 | Null |
| 2016-12-11 00:02:15 | Null | Null | 35 |
| 2016-12-11 00:20:10 | Null | Null | 36 |
| 2016-12-11 00:21:00 | Null | Null | 37 |
+---------------------+-----------+-----------+-----------+
我的解决方案有两个 Tables
如果我使用 MYSQL 是唯一或最简单的方法,使用左连接然后使用 UNION 或 UNION ALL 来按照我的预期进行填充,或者这甚至可以使用SQL 语句来得到这个结果?我在下面有一个例子,说明我正在使用两个 tables,但是当我需要在循环中抛出额外的 tables 时,我没有得到预期的结果。
这是我使用的两个 tables,这似乎能满足我的需要,但当我需要将其他 tables 添加到混音中时,这就是我的地方我很困惑将所有内容放入相同的 select 中并添加额外的 LEFT JOIN 或者如果我需要单独填充它们然后 UNION ALL.
SELECT a.Time, a.Value Value_tba, b.value Value_tbb
FROM TableA a
LEFT JOIN TableB b ON b.Time=a.Time
UNION ALL
SELECT b.Time, a.Value Value_tba, b.value Value_tbb
FROM TableB b
LEFT JOIN TableA a ON a.Time=b.Time
尝试以下操作:
select x.time, a.value as value_tba, b.value as value_tbb, c.value as value_tbc from (select time from a union select time from b union select time from c) x left join a on x.time = a.time left join b on x.time = b.time left join c on x.time = c.time