“这个子查询必须返回最多一条记录”我是否搞砸了关系?

时间:2015-04-09 11:00:13

标签: mysql ms-access

Si我是acesss和SQL的新手。 我有我的小数据库(商店系统) 我正在尝试进行一个非常简单的查询,其中打印出用户名和他们花费的总和。

 SELECT kl.name, kl.sname, Sum((SELECT onl_Sum FROM online_payment)) AS overall
FROM users AS kl, orders AS pas, payments AS maks
WHERE (((kl.Klnum)=[pas].[Klnum]) AND ((pas.Pasnum)=[maks].[Pasnum]) AND ((maks.paynum)=(SELECT paynum FROM online_payment)))
GROUP BY kl.name, kl.name;

我稍微更改了名字,以便更容易理解。

如果每个用户只有一次付款,问题就是有效,但当用户付款多次时,就会出错。

关系是这样的: 用户 - >订单 - >付款 - > Online_payment                              - > Not_online 用户可以有多个订单,但每个订单可以有一个或多个付款(问题),每个付款只有一个online_payment / Not_online付款

我认为我确实搞砸了这里的关系,但我不确定。

有更多的表和关系,但它们没有任何问题......

2 个答案:

答案 0 :(得分:0)

SELECT kl.name, kl.sname, Sum(online.onl_Sum) AS overall
FROM users AS kl JOIN orders AS pas ON pas.Klnum = kl.Klnum
JOIN payments AS maks ON pas.Pasnum=maks.Pasnum 
LEFT JOIN online_payment online ON maks.paynum = online.paynum
GROUP BY kl.name, kl.name;

答案 1 :(得分:0)

您最好使用加入加入您的在线支付和用户表格,这是我从预订系统数据库快速汇总的一个示例。您希望按用户表主键分组,否则具有相同名称的人将组合在一起

SELECT u.Firstname,u.Lastname, sum(i.Total) as total from User as u Join Invoice as i on u.id = i.UserId group by u.Firstname,u.Lastname,u.id