【问题标题】:Combine three table using access database使用access数据库合并三个表
【发布时间】:2012-09-08 13:06:00
【问题描述】:

我有三张桌子:

1. user    => user_id[Pk], user_name
2. payment => payment_id[PK], user_id[FK], amount
3. receive => receive_id[PK], user_id[FK], amount

现在我想获取如下记录:

用户名、支付金额、应收金额

提前谢谢..

我已阅读this,但它对我不起作用。

假设,在用户表中

user_id   用户名
1             ABC
2             XYZ

在付款表中

payment_id   user_id   金额
1                 1            1000
2                  1            200
3                  2           150

在接收表中:
接收 ID 用户 ID 金额
1               2            100
2               1            200

现在我想要像

这样的记录

用户名  paymentamount  应收款
ABC            1000                    200
ABC            200
XYZ            150                      100

【问题讨论】:

  • 您希望能够匹配 payment_id 和 receive_id 吗?如果是这样,您最好在接收表中实际包含一个 payment_id 作为外键。

标签: sql ms-access


【解决方案1】:

您可能希望按 user_id 汇总金额。

SELECT
    user.user_id,
    SUM(payment.amount) AS payment_amount,
    SUM(receive.amount) AS receive_amount
FROM (receive INNER JOIN [user] ON receive.user_id = user.user_id)
              INNER JOIN payment ON user.user_id = payment.user_id
GROUP BY user.user_id;

【讨论】:

  • 这是迄今为止唯一可以在 MS Access 中运行的。
  • 为此,您需要在接收表中添加一个额外的列(外键)来标识 payment_id。然后你需要在select中添加payment_id,并改变join顺序。
【解决方案2】:

使用内置的查询设计器。将三个表拖入其中,链接键(将字段拖放到彼此上),双击要添加到底部字段列表的字段,然后运行查询。如果需要,选择聚合表达式。

【讨论】:

    【解决方案3】:

    您可能需要将其调整为 MSAccess 语法,但想法是执行LEFT JOIN 付款并与用户一起接收表,因为这是父表,其他两个表可能有也可能没有此用户的记录.

    SELECT 
        u.user_name, 
        ISNULL(p.amount, 0) as paymentamount,
        ISNULL(r.amount, 0) as receivableamount
    FROM 
        user u
        LEFT JOIN payment p
        ON u.user_id = p.user_id
        LEFT JOIN receive r
        ON u.user_id = r.user_id
    

    【讨论】:

      【解决方案4】:
      select 
          user.user_name, payment.amount, receive.amount 
      from user 
          join payment on user.user_id == payment.user_id 
          join receive on user.user_id = receive.user_id; 
      

      【讨论】:

        【解决方案5】:
        select t1.user_name, t2.amount payementamount, t3.amount receiveableamount from 
        User t1,
        payment t2,
        receive t3
        where
        t1.user_id=t2.user_id and
        t1.user_id=t3.user_id
        

        你可以试试这个......

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-07-09
          • 2011-03-15
          • 1970-01-01
          • 2019-12-24
          • 2020-09-21
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多