2012-08-04 50 views
1

我有两个表,表示两个活动中按日期排序的用户数。 表A:具有DATE和用户数量的活性1 表B:具有数据和活动的用户数2MYSQL在一张表中整合两个表而不会丢失任何行

问题:我怎样才能将它们连接在一起在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 

谢谢

+0

您能否提供一些示例数据和期望的结果? – 2012-08-04 01:15:23

回答

0
SELECT * 
FROM table_A 

UNION ALL 

SELECT * 
FROM table_B 

会做你想做的事,但如果这是一件常规事情,你最好将两个表合并为一个。

+0

但这只显示了一列'count'而不是两个表的聚合。 – AliKH 2012-08-04 01:10:08

0
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 
+0

谢谢@安德鲁。这正是我所寻找的 – AliKH 2012-08-07 17:53:51

0

我想你要找的是什么你的两个表的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 
+0

这个作品也是@Zane。感谢UNION和JOIN组合的澄清。 – AliKH 2012-08-07 18:05:58

0

如果我理解正确的话,你试图合并两个表并添加'count'字段的值,按'day'分组(可能是'user')。

有几种方法可以完成我认为你正在尝试做的事情。在这种方法中,我们将使用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`; 

但是,这里没有考虑活动的'用户'。