2010-05-04 47 views
1

我想在我的數據庫是這樣運行的查詢:MySQL的WHERE條件,但不是它的限制

SELECT SUM(t1.value) AS total1, SUM(t2.value) AS total2, SUM(t3.value) AS total3, SUM(t4.value) AS total4 
FROM pay1 t1, pay2 t2, pay3 t3, pay4 t4 
WHERE t1.date = '2010-04-29' 
AND t2.date = '2010-04-29' 
AND t3.date = '2010-04-29' 
AND t4.date = '2010-04-29' 

我產生國際收支的報告,我希望看到共有來自各支付表格基於匹配日期。 問題是,有些表格不符合日期條件,我希望它們如果沒有顯示0值。目前,如果有任何表格與日期不符,我會得到0個結果。我希望在不符合日期的任何地方顯示值0,並且其他字段應該以找到的值出現。

對我來說,完美的操作數將是「ANDOR」,這樣它就不會受到任何表中不算數的任何日期的限制。不幸的是,ANDOR並不存在,因爲我知道我應該怎麼做?

任何人都可以幫忙嗎?謝謝。

回答

3

你想

SELECT 
    (SELECT SUM(value) FROM t1 WHERE date = '2010-04-29') AS total1, 
    (SELECT SUM(value) FROM t2 WHERE date = '2010-04-29') AS total2, 
    (SELECT SUM(value) FROM t3 WHERE date = '2010-04-29') AS total3, 
    (SELECT SUM(value) FROM t4 WHERE date = '2010-04-29') AS total4 
0

這聽起來像你想使用outer join,而不是內部聯接,這是默認的。

外連接不需要每個 記錄在兩個連接的表來 有一個匹配的記錄。即使沒有 其他匹配記錄存在,加入的 表格也會保留每條記錄。外部 將進一步細分爲左側 外部聯接,右側外部聯接和 完整外部聯接,具體取決於哪個表中保留了 (左側,右側或兩側)的行。

- Wikipedia

+0

基本正確,但連接是真正爲這個查詢錯誤的工具。你想要的是4個獨立的查詢,就像Tomalak建議的那樣。 – intgr 2010-05-04 23:45:40