2013-03-04 162 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