2015-10-27 261 views
0

我有兩個表:teremslogs1015
需要從基於類似的「哈希」行logs1015terems添加數據。MySQL左連接空結果

該查詢工作正常,如果 'SUM(INSUM)' 或 'SUM(outsum)大於0
但如果logs1015不包含與這些數據' 散列'然後查詢結果爲空。

什麼錯誤?由於

SELECT terems.*, 
    SUM(insum) as firstsum , 
    SUM(outsum) as secondsum 
    FROM terems 
    LEFT JOIN logs1015 USING(hash) 
    WHERE owner='1' 
     AND (type='stat') 
     AND (time BETWEEN 1445904000 AND 1445990400) 
    GROUP BY name 
    LIMIT 1000 

表結構

*terems*: id(int),hash(varchar),name(varchar),owner(int) 
*logs1015*: id(int),hash(varchar),type(varchar),insum(int),outsum(int),time(varchar) 
+3

你的表格結構是什麼?從'logs1015'找到' – Alex

+0

'是'owner','type'還是'time'?如果是這樣,那麼您還需要檢查空值以匹配不存在的行。 – vhu

+0

編輯您的問題幷包含*限定的列名*(以便標識表名)。 –

回答

1

當(左)外側連接,你必須把where子句外部表的連接條件,否則,你說,它必須加入後存在。然後你隱式地把它變成一個內部連接。

也可以在桌面上使用別名,以便您輕鬆發現這些錯誤。

例子:

SELECT t.name, 
    SUM(l.insum) as firstsum , 
    SUM(l.outsum) as secondsum 
FROM terems t 
LEFT JOIN logs1015 l ON t.hash = l.hash 
        AND (l.type='stat') 
WHERE t.owner='1' 
    AND (t.time BETWEEN 1445904000 AND 1445990400) 
GROUP BY t.name 
LIMIT 1000 
+0

剛剛添加表結構的主題。 您的查詢與我的查詢結果相同。 – 966p

0

工作的解決方案:

"SELECT t.*, 
     SUM(l.insum) as firstsum , 
     SUM(l.outsum) as secondsum 
     FROM terems t 
     LEFT JOIN logs1015 l ON 
      t.hash = l.hash 
      AND (l.type='stat') 
      AND (l.time BETWEEN $fromstamp AND $tostamp) 
     WHERE t.owner='$userid'  
     GROUP BY t.name 
     LIMIT 1000"; 

非常感謝!