【问题标题】:MYSQL UNION JOIN SUM(amount) output two result instead of oneMYSQL UNION JOIN SUM(amount) 输出两个结果而不是一个
【发布时间】:2017-02-19 13:53:49
【问题描述】:

下面有这个:

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

它工作正常,但要么在顶部显示一个空行,要么在下面显示总和或相对。我尝试了 LIMIT 1,但问题是当第 2 行中的 SUM(amount) 输出时,我无法获取,如果我不应用任何限制,它只会获取第 1 行中 SUM(amount) 输出的结果。我没有不知道缺少什么。请协助。谢谢。

【问题讨论】:

  • 请张贴结果和表格中的日期转储
  • 这些是假外连接。该查询假装外部联接chart_of_accountasset_liability_income_expenditure_tbl,但在WHERE 子句中,您取消了所有不是“FA”的a_l_code,这最终消除了所有外部联接记录(a_l_code 为空)。所以连接实际上是内部连接。你加入是为了将mainaccount_a_2017.amount 与相关“FA”记录的出现相乘?这看起来很奇怪。
  • 拥有表mainaccount_a_2017mainaccount_b_2017(甚至在表名中只有一年)听起来像是一个糟糕的、糟糕的数据库设计。希望这些只是临时表,您刚刚设置好了吗?

标签: mysql join sum union


【解决方案1】:

我想通了。我不得不翻转一些东西。结果如下:

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

【讨论】:

    猜你喜欢
    • 2013-02-18
    • 1970-01-01
    • 2013-10-07
    • 2016-09-15
    • 2016-03-10
    • 2012-07-07
    • 1970-01-01
    相关资源
    最近更新 更多