如何根据连接表中连接的第二个表中的条件从一个表中获取记录
我有两个表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
外键关联的量,如果检查满足条件,以便我只得到与AccountId's
相关联的那些数量大于5000
的ClientId'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
希望这将有助于! :)
也许我失去了你的要求的东西,但如果你想有账户金额的客户名单> = 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
条款。
谢谢,它的工作。我总是在提供额外的建议时提供,这非常有帮助! – Leron 2014-09-02 08:57:24
谢谢,它也在工作。感谢编写一些额外代码的努力。 – Leron 2014-09-02 08:57:50