加入多个具有访问权限的表
Posted
技术标签:
【中文标题】加入多个具有访问权限的表【英文标题】:Join Multiple tables with access 【发布时间】:2016-07-13 08:46:23 【问题描述】:我在 Access 数据库中有三个表。 CheckDJ
和 CashDJ
的列数比 CashRJ
多。我想将这些表合并为一个。我有以下查询:
SELECT
a.acctname,
a.code,
(
sum(a.debit) + sum(b.debit) + sum(c.debit)
) AS DebitTotal,
(
sum(a.credit) + sum(b.credit) + sum(c.credit)
) AS CreditTotal
FROM
(
CheckDJ a
LEFT OUTER JOIN CashRJ b ON a.id = b.id
)
LEFT OUTER JOIN CashDJ c ON a.id = c.id
GROUP BY
a.acctname,
a.code
问题是,上面的代码只显示与CheckDJ
相似的数据。谁能帮我?提前谢谢!
【问题讨论】:
很高兴在这里发布这些表格中的一些示例数据和所需的结果(再次作为数据)。 什么是相似数据 @GiladGreen 与 CheckDJ 相同的数据。我输入到与CheckDJ不同的其他表中的其他数据不显示。 【参考方案1】:假设acctname
和code
是主键,从UNION
查询中选择以包含所有记录:
SELECT acctname, code, SUM(debit) As DebitTotal, SUM(credit) AS CreditTotal
FROM
(
SELECT acctname, code, debit, credit, "CheckDJ" As SoursTblName
FROM CheckDJ
Union
SELECT acctname, code, debit, credit, "CashRJ" As SoursTblName
FROM CashRJ
Union
SELECT acctname, code, debit, credit, "CashDJ" As SoursTblName
FROM CashDJ
)
GROUP BY acctname, code
添加字段SoursTblName
是为了防止将不同表中的相同记录合并为一个。
如果CheckDJ
和CashDJ
或CashRJ
中可能有相同的记录,请使用此查询:
SELECT acctname, code, SUM(debitSum) As DebitTotal, SUM(creditSum) AS CreditTotal
FROM
(
SELECT acctname, code, SUM(debit) As debitSum, SUM(credit) As creditSum, "CheckDJ" As SoursTblName
FROM CheckDJ
GROUP BY acctname, code
Union
SELECT acctname, code, SUM(debit) As debitSum, SUM(credit) As creditSum, "CashRJ" As SoursTblName
FROM CashRJ
GROUP BY acctname, code
Union
SELECT acctname, code, SUM(debit) As debitSum, SUM(credit) As creditSum, "CashDJ" As SoursTblName
FROM CashDJ
GROUP BY acctname, code
)
GROUP BY acctname, code
【讨论】:
您的查询不包含指定的表达式“acctname”作为聚合函数的一部分。这是我在尝试您的代码时遇到的错误。 我修改第二条sql @Mai.V - 如果您通过将答案标记为有用和/将其标记为已接受来表示感谢,我将不胜感激;) 完成。再次感谢你。 :)【参考方案2】:我明白你的意思,你不应该使用组功能。即:
sum(a.credit) + sum(b.credit) + sum(c.credit)
和
sum(a.debit) + sum(b.debit) + sum(c.debit)
这样,您将获得相同数量的每条记录。只需将它们添加在一起,无需任何组功能。
【讨论】:
Left Join
将结果集限制为CheckDJ
中的id
s,其他id
s将不会被汇总。分组不是问题。
@Mai.V 我编辑了上面的联合查询,现在效果如何?以上是关于加入多个具有访问权限的表的主要内容,如果未能解决你的问题,请参考以下文章