加入多个具有访问权限的表

Posted

技术标签:

【中文标题】加入多个具有访问权限的表【英文标题】:Join Multiple tables with access 【发布时间】:2016-07-13 08:46:23 【问题描述】:

我在 Access 数据库中有三个表。 CheckDJCashDJ 的列数比 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】:

假设acctnamecode 是主键,从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是为了防止将不同表中的相同记录合并为一个。


如果CheckDJCashDJCashRJ 中可能有相同的记录,请使用此查询:

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中的ids,其他ids将不会被汇总。分组不是问题。 @Mai.V 我编辑了上面的联合查询,现在效果如何?

以上是关于加入多个具有访问权限的表的主要内容,如果未能解决你的问题,请参考以下文章

Postgres:具有(延迟)读写访问权限的大表

将对象保存在具有公共访问权限的 AWS S3 存储桶中

linux用户组及权限

类具有默认访问权限时的 Java 成员访问权限

我如何配置一个用户具有只读访问权限,而另一用户具有对Hangfire仪表板的完全访问权限?

spring mvc怎么加入权限控制,在未登录前,任何访问url都跳转到login页面;登录成功