Mysql - 将3个具有不同行数的表连接到另一个表中

标签 mysql

我有以下表格,我需要加入它们:

表A

+----+----------+--------+
| ID | Period   | Value  |
+----+----------+--------+
| 1  |2009-02-01|  20.3  |
| 2  |2009-03-01|  22.5  |
| 3  |2009-04-01|  17.4  |
| 4  |2009-05-01|  16.5  |
| 5  |2009-06-01|  26.5  |
| 6  |2009-07-01|  35.4  |
+----+----------+--------+

表B

+----+----------+--------+
| ID | Period   | Value  |
+----+----------+--------+
| 1  |2009-04-01|  57.1  |
| 2  |2009-05-01|  56.5  |
| 3  |2009-06-01|  59.8  |
| 4  |2009-07-01|  55.4  |
+----+----------+--------+

表C

+----+----------+--------+
| ID | Period   | Value  |
+----+----------+--------+
| 1  |2009-03-01|  82.5  |
| 2  |2009-04-01|  87.4  |
| 3  |2009-05-01|  86.7  |
+----+----------+--------+

我的输出表已创建空表,如下所示:

表 D

+----+----------+--------+--------+--------+
| ID | Period   | ValueA | ValueB | ValueC |
+----+----------+--------+--------+--------+

由于表 A 包含大部分记录,我想将其用作主表。期望的结果如下:

表 D

+----+----------+--------+--------+--------+
| ID | Period   | ValueA | ValueB | ValueC |
+----+----------+--------+--------+--------+
| 1  |2009-02-01|  20.3  | NULL   | NULL   |
| 2  |2009-03-01|  22.5  | NULL   | 82.5   |
| 3  |2009-04-01|  17.4  | 57.1   | 87.4   |
| 4  |2009-05-01|  16.5  | 56.5   | 86.7   |
| 5  |2009-06-01|  26.5  | 59.8   | NULL   |
| 6  |2009-07-01|  35.4  | 55.4   | NULL   |
+----+----------+--------+--------+--------+

我对 MySQL 很陌生。我在论坛中查看了类似的问题并尝试自己解决,但没有成功。

任何帮助表示赞赏。

回答

好的。一些事情。首先,问题不重复!这件事看起来更像是一个快速的主持人,而不是重复的问题。不,我在本网站的任何地方都没有找到这个答案,而且肯定不在版主答案的建议中。

现在是有趣的部分。 在创意版主的帮助下,花了几个小时终于成功了。正如我在原题中所说,表D已经存在。这是因为模型是由第三方应用程序创建和管理的。在这种情况下, Django .这是很重要的一点,否则操作将会有所不同。我的服务器上也有多个架构。 我认为在这种情况下,此查询的最佳方法是使用别名,如下所示:

insert into my_schema.table_d(period, valueA, valueB, valueC)
select A.Period, A.Value, B.Value, C.Value
from my_schema.table_a A

left join my_schema.table_b B
on A.Period = B.Period
left join my_schema.table_c C
on A.Period = C.Period

最佳答案

您正在寻找左连接:

insert into d( . . . )
    select . . .
    from a left join
         b
         on a.period = b.period left join
         c
         on a.period = c.period;

填写 所在的列。 。 . 是。

关于Mysql - 将3个具有不同行数的表连接到另一个表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42747725/

相关文章:

php - 谷歌图表 API 数据

PHP/Mysql : A db entry needs to store multiple values for categorization (cat, 子目录、标签)

php - 将csv文件导入MYSQL的最快方法

mysql - 像片段一样缓存 activerecord 结果

php - 统计相关表Gridview中的记录

mysql - 更新所有记录的外键字段以反射(reflect)新的主键

mysql - 在 MySQL 对表进行分区时,这里如何使用 DIV 作为 HASH 分区定义的一部分?

mysql - 对数据进行分组时选择特定行

mysql - 查询运行太慢

PHP MySQL计算有多少行有相同的数据