【发布时间】: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_account和asset_liability_income_expenditure_tbl,但在WHERE 子句中,您取消了所有不是“FA”的a_l_code,这最终消除了所有外部联接记录(a_l_code 为空)。所以连接实际上是内部连接。你加入是为了将mainaccount_a_2017.amount与相关“FA”记录的出现相乘?这看起来很奇怪。 -
拥有表
mainaccount_a_2017和mainaccount_b_2017(甚至在表名中只有一年)听起来像是一个糟糕的、糟糕的数据库设计。希望这些只是临时表,您刚刚设置好了吗?