2014-09-02 115 views
0

我有兩個表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數據。

回答

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 

希望這將有助於! :)

+0

謝謝,它也在工作。感謝編寫一些額外代碼的努力。 – Leron 2014-09-02 08:57:50

2

也許我失去了你的要求的東西,但如果你想有賬戶金額的客戶名單> = 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

相關問題