2017-02-19 10 views
0

をJOIN私はこの下にあります。それが正常に動作するが、MYSQL UNION SUM(量)出力2つの結果の代わりに1

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 

ディスプレイのいずれか1つの空の上部に行と下和又はVIS-A- vis。私はLIMIT 1を試しましたが、行2のSUM(量)が出力され、フェッチできず、制限を適用しないと、行1のSUM(量)何が欠けているか知っている。親切にお手伝いください。ありがとう。

+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'(テーブル名だけで1年であっても)は、悪いデータベース設計のように聞こえます。うまくいけば、これらはちょうど一時テーブルです、あなたはセットアップしましたか? –

答えて

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