如何根据连接表中连接的第二个表中的条件从一个表中获取记录

如何根据连接表中连接的第二个表中的条件从一个表中获取记录

问题描述:

我有两个表ClientsAccounts。每个客户可以有多个账户,一个账户可以与多个客户相关(在某些情况下),所以我有第三个表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外键关联的量,如果检查满足条件,以便我只得到与AccountId's相关联的那些数量大于5000ClientId's,然后最终使用那些ID's最终选择Clients表中的Client's数据。

你能试试吗?

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 

希望这将有助于! :)

+0

谢谢,它也在工作。感谢编写一些额外代码的努力。 – Leron 2014-09-02 08:57:50

也许我失去了你的要求的东西,但如果你想有账户金额的客户名单> = 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 byhaving条款。

+1

谢谢,它的工作。我总是在提供额外的建议时提供,这非常有帮助! – Leron 2014-09-02 08:57:24