MYSQL 将两张表整合在一张表中,不会遗漏任何一行

Posted

技术标签:

【中文标题】MYSQL 将两张表整合在一张表中,不会遗漏任何一行【英文标题】:MYSQL integrating two tables in a single table without missing any row 【发布时间】:2012-08-02 01:15:07 【问题描述】:

我有两个表格,分别代表两个活动中的用户数量,按日期排序:

表 A:包含活动 1 中的日期和用户数量 表 B:在活动 2 中有数据和用户数

问题:如何在 mysql 中将它们连接在一起(特别是我使用 phpMYADMIN 进行数据操作)?我对这段代码的问题是会丢失一些条目(其中一列中没有关于特定日期的信息):

SELECT a1.day, a1.count, b1.count
FROM table_A a1 
JOIN table_B b1 on a1.day = b1.day
ORDER BY a1.day  

【问题讨论】:

您能提供一些示例数据和想要的结果吗? 【参考方案1】:
SELECT *
FROM table_A

UNION ALL

SELECT *
FROM table_B

会做你想做的事,但如果这是一个常规的事情,你最好简单地将两个表组合成一个表。

【讨论】:

但这仅向我显示“计数”的一列,而不是两个表的聚合。【参考方案2】:
SELECT 
    u.day, SUM(count_A) AS count_A, SUM(count_B) AS count_B
FROM
(SELECT day, count AS count_A, 0 AS count_B
FROM table_A
UNION ALL
SELECT day, 0, count 
FROM table_B) AS u
GROUP BY u.day
ORDER BY u.day

【讨论】:

谢谢@Andrew。这正是我一直在寻找的【参考方案3】:

我认为您正在寻找的是您的两个表的FULL OUTER JOIN,可以像这样在 MySQL 中模拟:

SELECT   *
FROM     (
         SELECT     a.day, a.count, b.count
         FROM       table_A a
         LEFT JOIN  table_B b ON a.day = b.day

         UNION ALL

         SELECT     a.day, a.count, b.count
         FROM       table_A a
         RIGHT JOIN table_B b ON a.day = b.day
         WHERE      a.day IS NULL
         ) a
ORDER BY a.day

【讨论】:

这也可以@Zane。感谢您对 UNION 和 JOIN 组合的说明。【参考方案4】:

如果我对您的理解正确,您正在尝试合并两个表并添加按“天”分组的“计数”字段的值(可能是“用户”)。

有几种方法可以完成我认为您正在尝试做的事情。在此方法中,我们将创建一个表并使用 UNION ALL、SUM 和 GROUP BY 插入 Table_A 和 Table_B 的值。

create table `Table_C` (
   `id` int unsigned primary key auto_increment,
   `day` varchar(16),
   `count` integer
);

INSERT INTO `Table_C`
SELECT * FROM ( 
    SELECT
         0 AS `id`,
        `day`,
        SUM(`count`)
    FROM ( 
       SELECT `a`.`day` AS `day`, `a`.`count` AS `count` FROM `Table_A` `a` 
         UNION ALL
       SELECT `b`.`day` AS `day`, `b`.`count` AS `count` FROM `Table_B` `b`
         ) AS `u` 
    GROUP BY `u`.`day`
    ORDER BY `u`.`day`
) AS `t1`;

但是,这里不考虑活动的“用户”。

【讨论】:

以上是关于MYSQL 将两张表整合在一张表中,不会遗漏任何一行的主要内容,如果未能解决你的问题,请参考以下文章

SQL关联两张表查数据,结果只显示一条。

SQL关联两张表查数据,结果只显示一条。

数据库将两张表进行横向连接(拼接成一张表的形式显示)

两张表 在一张表中插入数据时要使用触发器也更新另一张 有错误

基于公共列将两张表合并为一张表

sql怎么把两张表合并成一张