2017-02-19 32 views
0

我有這樣的下面:MYSQL UNION JOIN SUM(量)輸出的兩個結果,而不是一個

SELECT a.* FROM (SELECT 
     asset_liability_income_expenditure_tbl.a_l_code, 
     SUM(mainaccount_a_2017.amount), mainaccount_a_2017.dr_cr_action 
     FROM `mainaccount_a_2017` LEFT JOIN chart_of_account 
     ON (
     chart_of_account.joint_account_numbers = 
     mainaccount_a_2017.joint_account_number 
     ) 
     LEFT JOIN asset_liability_income_expenditure_tbl 
     ON (
     asset_liability_income_expenditure_tbl.a_l_code = 
     chart_of_account.account_type 
    ) 
WHERE asset_liability_income_expenditure_tbl.a_l_code = 'FA' 
     AND mainaccount_a_2017.dr_cr_action = 'DR' UNION 
SELECT asset_liability_income_expenditure_tbl.a_l_code, 
SUM(mainaccount_b_2017.amount), 
mainaccount_b_2017.dr_cr_action 
FROM `mainaccount_b_2017` 
LEFT JOIN chart_of_account ON (
      chart_of_account.joint_account_numbers = 
      mainaccount_b_2017.joint_account_number 
    ) 
LEFT JOIN asset_liability_income_expenditure_tbl ON ( 
      asset_liability_income_expenditure_tbl.a_l_code = 
      chart_of_account.account_type 
    ) 
WHERE asset_liability_income_expenditure_tbl.a_l_code = 'FA' 
     AND mainaccount_b_2017.dr_cr_action = 'DR' 
) AS a 

它工作得很好,但顯示無論是在最上面的一個空行和下面的總和或VIS-A-可見。我試圖限制1,但問題是當第2行中的SUM(數量)輸出,我無法獲取,如果我沒有應用任何限制,它只會獲取SUM(金額)輸出在第1行的結果。我不'不知道什麼是錯過的。請協助。謝謝。

+0

請發佈結果和表中的日期轉儲 –

+0

這些是假外連接。查詢假裝外連接「chart_of_account」和「asset_liability_income_expenditure_tbl」,但在WHERE子句中,您關閉所有不是'FA'的a_l_code,最終擺脫所有外連接記錄(帶有a_l_code null)。所以連接真的是內連接。你加入是爲了將'mainaccount_a_2017.amount'乘以相關'FA'記錄?這看起來很奇怪。 –

+0

擁有「mainaccount_a_2017」和「mainaccount_b_2017」表(甚至在表名中只有一年)就像是一個糟糕的,不好的數據庫設計。這些只是臨時表,你剛剛設置? –

回答

0

我想通了。我不得不翻轉一些東西。結果如下:

SELECT SUM(a) FROM 
(
    SELECT SUM(mainaccount_a_2017.amount) 
    AS a FROM `mainaccount_a_2017` 
    LEFT JOIN chart_of_account ON (chart_of_account.joint_account_numbers = mainaccount_a_2017.joint_account_number) 

    LEFT JOIN asset_liability_income_expenditure_tbl ON (asset_liability_income_expenditure_tbl.a_l_code = chart_of_account.account_type) 

    WHERE asset_liability_income_expenditure_tbl.a_l_code = 'FA' 
    AND mainaccount_a_2017.dr_cr_action = 'DR' 

    UNION ALL 

    SELECT SUM(mainaccount_b_2017.amount) 
    AS a FROM `mainaccount_b_2017` 
    LEFT JOIN chart_of_account ON (chart_of_account.joint_account_numbers = mainaccount_b_2017.joint_account_number) 

    LEFT JOIN asset_liability_income_expenditure_tbl ON (asset_liability_income_expenditure_tbl.a_l_code = chart_of_account.account_type) 

    WHERE asset_liability_income_expenditure_tbl.a_l_code = 'FA' AND mainaccount_b_2017.dr_cr_action = 'DR' 
) a 
相關問題