Php 如何连接多个表,其中某些列(而不是所有列)是相同的,并返回每个列的总和?
我有多个表,跟踪来自不同位置(即寒冷和温暖)的信息,这些位置根据季节提供服务,并且需要创建位置的公司级视图 查看联合和联接的描述,看起来表必须具有相同的列数或相同的列名。我需要的是一个结果,使用PHP MySQL提供相同列和唯一列的总和Php 如何连接多个表,其中某些列(而不是所有列)是相同的,并返回每个列的总和?,php,mysql,outer-join,Php,Mysql,Outer Join,我有多个表,跟踪来自不同位置(即寒冷和温暖)的信息,这些位置根据季节提供服务,并且需要创建位置的公司级视图 查看联合和联接的描述,看起来表必须具有相同的列数或相同的列名。我需要的是一个结果,使用PHP MySQL提供相同列和唯一列的总和 表1 +-------+-------+-------+ |A列| B列| C列| +-------+-------+-------+ | 2 | 8 | 5 | +-------+-------+-------+ | 1 |
表1
+-------+-------+-------+
|A列| B列| C列|
+-------+-------+-------+
| 2 | 8 | 5 |
+-------+-------+-------+
| 1 | 9 | 7 |
+-------+-------+-------+
| 3 | 2 | 3 |
+-------+-------+-------+
表2
+-------+-------+-------+
|第1列|第2列|第3列|
+-------+-------+-------+
| 2 | 1 | 6 |
+-------+-------+-------+
| 5 | 5 | 4 |
+-------+-------+-------+
| 2 | 7 | 3 |
+-------+-------+-------+
表3
+-------+-------+-------+-------+-------+-------+
|col-A | col-B | col-1 | col-2 | col-3 | col-4|
+-------+-------+-------+-------+-------+-------+
| 9 | 4 | 1 | 2 | 1 | 4 |
+-------+-------+-------+-------+-------+-------+
| 2 | 6 | 6 | 8 | 3 | 6 |
+-------+-------+-------+-------+-------+-------+
| 4 | 7 | 3 | 2 | 4 | 5 |
+-------+-------+-------+-------+-------+-------+
结果表
+-------+-------+-------+-------+-------+-------+-------+
|col-A | col-B | col-C | col-1 | col-2 | col-3 | col-4|
+-------+-------+-------+-------+-------+-------+-------+
| 21 | 36 | 15 | 19 | 25 | 21 | 15 |
+-------+-------+-------+-------+-------+-------+-------+
我认为这可以通过联合来实现,如下所示:
SELECT SUM(`col-A`) AS 'Col-A',SUM(`col-b`) AS 'Col-B',
SUM(`col-C`) AS 'Col-C',SUM(`col-1`) AS 'Col-1',
SUM(`col-2`) AS 'Col-2',SUM(`col-3`) AS 'Col-3',SUM(`col-4`) AS 'Col-4'
FROM
(SELECT `col-A`,`col-b`,0 AS 'col-c',`col-1`,`col-2`,`col-3`,`col-4` FROM table_3 UNION
SELECT 0,0,0,`col-1`,`col-2`,`col-3`,0 FROM table_2 UNION
SELECT `col-A`,`col-b`,`col-C`, 0,0,0,0 FROM table_1 ) XX
因为表3的列最多,所以我把它放在联合体的顶部。下面的查询只需要填写0
(零),表中不存在该列即可满足union要求。谢谢,这就解决了问题,我想我现在理解了这个概念。对“缺少”的列使用“0”。现在我只需要弄清楚如何为一个动态数据库实现这个解决方案(天气是不可预测的)。我尝试了没有它的解决方案,但收到了错误。XX用作子查询的别名。这就像将子查询分配给一个名称,并将其视为表名。您可以更改为所需的任何varchar值,如A、B、A1、B1、mytable、subtable
等。