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 将两张表整合在一张表中,不会遗漏任何一行的主要内容,如果未能解决你的问题,请参考以下文章