2013-03-04 129 views
0

我有两个相同的表(_impressionsdaily,_impressionsalltime),在每天结束时我将所有数据从日常移动到所有时间。 结构是:ID,purchaseID,印象,唯一,日期。mysql左连接不返回来自连接表的行

我运行下面的查询:

SELECT 
    daily.purchaseID, 
    SUM(daily.impression + IFNULL(alltime.impression, 0)) AS impression, 
    SUM(daily.unique + IFNULL(alltime.unique, 0)) AS `unique` 
    FROM _impressionsdaily daily 
    LEFT JOIN _impressionsalltime alltime ON alltime.purchaseID= daily.purchaseID 
    GROUP BY daily.purchaseID; 

的事情是,如果alltime表有不可用在日常采购,我不会看到他们。

基本上这个想法是总结所有的日常和全天候的印象。

---编辑 事情是在每天上午12:00,每天的表被复制到全时,然后删除。 所以给出的解决方案是错误的..

感谢您的帮助, 丹尼

+0

是否在复制到不断的alltime表日常表中的记录?或基于时间的,所以所有的时间都与每日不同步?如果它们不同步,则需要进行某种外连接,因为内连接/左连接/右连接只会查找存在于任一表中或两个表中的记录。 – 2013-03-04 17:28:10

+0

http://dev.mysql.com/doc/refman/5.0/en/union.html – 2013-03-04 17:34:22

+0

我熟悉工会......只需要@SeamWM思维方式 – 2013-03-04 17:42:36

回答

1

我认为你正在寻找一个Union Select。尝试是这样的:

SELECT DISTINCT(p.ID), p.purchaseID 
FROM (SELECT * 
     FROM _impressionsdaily 
     UNION SELECT * 
     FROM _impressionsalltime) AS p 
GROUP BY p.purchaseID 
+0

只需添加即可调整它...但这是解决方案... thx! – 2013-03-04 17:41:42

+0

添加SUM * ...我错过了我以前的回应:) – 2013-03-04 19:43:03

0
SELECT 
daily.purchaseID, 
SUM(daily.impression + IFNULL(alltime.impression, 0)) AS impression, 
SUM(daily.unique + IFNULL(alltime.unique, 0)) AS `unique` 
FROM _impressionsdaily daily 
LEFT JOIN _impressionsalltime alltime ON alltime.purchaseID= daily.purchaseID 
GROUP BY daily.purchaseID; 

在你没有选择任何现场形式_impressionsalltime表这种情况。

您可以使用此SQL从_impressionsalltime表中选择字段以及

SELECT 
alltime.*, 
daily.purchaseID, 
SUM(daily.impression + IFNULL(alltime.impression, 0)) AS impression, 
SUM(daily.unique + IFNULL(alltime.unique, 0)) AS `unique` 
FROM _impressionsdaily daily 
LEFT JOIN _impressionsalltime alltime ON alltime.purchaseID= daily.purchaseID 
GROUP BY daily.purchaseID; 
+0

这是不正确的,因为这个查询的结果将只返回结果的左侧作为NULLS ... – 2013-03-04 17:37:15