2015-11-13 46 views
1

我試圖從不同的表格中選擇一個總計爲一個查詢。出於某種原因,以下查詢用於工作,但現在返回NULL。如果我執行單個查詢,他們確實會返回一筆款項,但不會將它們加在一起。任何一個人可能會看到我做錯了什麼?MySQL多個SELECT不工作

SELECT 
(
     (SELECT SUM(a.Total) FROM table1 a) + 
     (SELECT SUM(c.Total) FROM table2 c) + 
     (SELECT SUM(eb.Total) FROM table3 eb) + 
     (SELECT SUM(h.Amount) FROM table4 h) + 
     (SELECT SUM(n.Total) FROM table5 n) + 
     (SELECT SUM(mbo.Total) FROM table6 mbo) 
    ) 
AS Overral_Amount_Total 

回答

2

您可以使用子查詢:

SELECT SUM(sub.col) AS Overral_Amount_Total 
FROM 
(
    SELECT SUM(Total) AS col FROM table1 
    UNION ALL 
    SELECT SUM(Total) FROM table2 
    UNION ALL 
    SELECT SUM(Total) FROM table3 
    UNION ALL 
    SELECT SUM(Amount) FROM table4 
    UNION ALL 
    SELECT SUM(Total) FROM table5 
    UNION ALL 
    SELECT SUM(Total) FROM table6 
) AS sub; 

點是(你的表中有一個爲空/包含了所有NULL在特定的列):

CREATE TABLE tab(col INT); 

SELECT SUM(col) 
FROM tab; 
-- will return NULL 

SqlFiddleDemo

對於空表,它將返回NULL,並且添加到NULL的任何內容都是NULL

+1

是的,你是對的@ lad2025,我覺得其中一個表返回NULL是因爲它是空的......所以你上面的評論是真實的......感謝你的答案,因爲你的方式有效。 – Morgs

1

你有標量子查詢總是返回一行。這意味着,您還可以在子查詢中使用COALESCE()

SELECT (
     (SELECT COALESCE(SUM(a.Total), 0) FROM table1 a) + 
     (SELECT COALESCE(SUM(c.Total), 0) FROM table2 c) + 
     (SELECT COALESCE(SUM(eb.Total), 0) FROM table3 eb) + 
     (SELECT COALESCE(SUM(h.Amount), 0) FROM table4 h) + 
     (SELECT COALESCE(SUM(n.Total), 0) FROM table5 n) + 
     (SELECT COALESCE(SUM(mbo.Total), 0) FROM table6 mbo) 
     ) AS Overall_Amount_Total 

這可能是,如果你的實際查詢中使用相關子查詢非常方便。這個解決方案比UNION ALL解決方案更容易實現。

+0

感謝您的見解,我會一直記住這一點...... – Morgs