我有两张表Clients
和Accounts
。每个客户可能有多个帐户,一个帐户可能与多个客户有关(在某些情况下),所以我有第三个表Clients_Accounts
这是一个普通的连接表,因此相关部分是:
Clients | Accounts | Clients_Accounts
Id(PK) | Id(PK); Amount(int) | Id(PK); ClientId(FK); AccountId(FK)
我坚持如何从Clients
中选择数据,具体取决于他们在Accouts
中的数量。例如Clients
所有Amount >= 5000
。
我知道JOIN
的基础知识,所以我可以到达附近的某处:
SELECT *
FROM Clients AS c
INNER JOIN Clients_Accounts AS cs ON c.Id = cs.ClientId
这是我迷失的地方,因为我想获得与AccountId
外键关联的金额,并检查它是否符合条件,以便我只获得与{ClientId's
相关联的AccountId's
1}}数量大于5000
,然后最终使用这些ID's
最终从Client's
表中选择Clients
数据。
答案 0 :(得分:2)
SELECT * FROM Clients C
JOIN Clients_Accounts CS
ON c.Id = cs.ClientId
JOIN Accounts A
ON A.Id = cs.AccountId
WHERE A.Amount > 5000
它基本上是一个+级别的连接,包括帐户的ID(在两个表中)。
这应该是您所需要的基础,但是由于多对多关系,您可能必须GROUP
才能获得在多个客户端显示的帐户的累计总数
我提到的分组会看起来像这样,假设我已正确理解你的OP(我不确定,因为我还没有咖啡)
SELECT c.id, SUM(a.amount) FROM Clients C
JOIN Clients_Accounts CS
ON c.Id = cs.ClientId
JOIN Accounts A
ON A.Id = cs.AccountId
GROUP BY c.id, a.id
HAVING SUM(a.amount) > 5000
我希望这会有所帮助! :)
答案 1 :(得分:2)
也许我在您的要求中遗漏了一些内容,但如果您想获得帐户金额> gt = 5000的客户列表,那么应该这样做:
SELECT * FROM Clients AS c
INNER JOIN Clients_Accounts AS cs
ON c.Id = cs.ClientId
INNER JOIN Accounts a
ON a.Id = cs.AccountId
WHERE a.Amount >= 5000
当然,此列表可能包含帐户少于5000的客户,只要他们至少有一个> = 5000的帐户。如果您希望客户的总金额超过所有关联帐户> = 5000则您必须使用带有group by
和having
子句的聚合函数。