2011-05-14 105 views
2

首先,對不起,如果這是一個足夠接近的副本。我發現this question,這幾乎是我想要的,但我無法圍繞如何改變它以滿足我的需求。加入3張表

我有這3個表:

 
cs_Accounts: 

+----+-----------------------------+-------------+ 
| id | email      | username | 
+----+-----------------------------+-------------+ 
| 63 | [email protected] | jamwaffles2 | 
| 64 | [email protected] | jamwaffles3 | 
| 65 | dhenddfggdfgetal-pipdfg.com | dhendu9411 | 
| 60 | jwapldfgddfgfffles.co.uk | jamwaffles | 
+----+-----------------------------+-------------+ 

cs_Groups: 

+----+-----------+------------+-------------+ 
| id | low_limit | high_limit | name  | 
+----+-----------+------------+-------------+ 
| 1 |   0 |   0 | admin  | 
| 2 |   1 |   50 | developer | 
| 3 |  76 |  100 | reviewer | 
| 4 |  51 |   75 | beta tester | 
| 5 |   1 |   50 | contributor | 
+----+-----------+------------+-------------+ 

cs_Permissions: 

+----+---------+----------+ 
| id | user_id | group_id | 
+----+---------+----------+ 
| 4 |  60 |  4 | 
| 3 |  60 |  1 | 
| 5 |  60 |  2 | 
| 6 |  62 |  1 | 
| 7 |  62 |  3 | 
+----+---------+----------+ 

我一直在冥思苦想,3路馬上加入了幾個小時,我無法得到我想要的結果。我正在尋找這樣的行爲:對於cs_Accounts中的每個用戶,將返回一行,其中cs_Permissions中有一行包含其ID和cs_Groups的組的ID,以及group_id的組具有high_lmiit,並且在我可以指定的範圍內的low_limit

使用上面的表中的數據,我們可能最終是這樣的:

 
email       username  cs_Groups.name 
---------------------------------------------------------- 
jwapldfgddfgfffles.co.uk  jamwaffles admin 
jwapldfgddfgfffles.co.uk  jamwaffles developer 
jwapldfgddfgfffles.co.uk  jamwaffles beta tester 
dhenddfggdfgetal-pipdfg.com dhendu9411 admin 
dhenddfggdfgetal-pipdfg.com dhendu9411 reviewer 

有一個額外的條件,但是。這種情況是隻有在用戶所屬的組具有high_limitlow_limit時才選擇行,其中的值可以使用WHERE子句指定。正如你所看到的,上面的表只包含在權限表中有行的用戶。

回答

5

這感覺很像家庭作業,但有一個像詹姆斯這樣的名字我總是願意幫忙。

select a.email,a.username,g.name 
from cs_Accounts a 
inner join cs_Permissions p on p.user_id = a.id 
inner join cs_Groups g on g.id = p.Group_id 
where g.low_limit > 70 
and g.high_limt < 120 
+0

這實際上是一個項目,我工作的一部分WHERE條款添加到該查詢。我明白爲什麼這可能是功課,但它不是 - 只是一個非常混亂的問題! – Bojangles 2011-05-14 12:46:02

+0

謝謝你好先生 - 這是一種享受:-)我沒有意識到它會像這樣簡單! – Bojangles 2011-05-14 12:56:37

+0

真棒的答案,適應這種結構,以適應我的查詢,它直接工作,直觀地說至少!聲譽++ :) – cwiggo 2013-11-06 10:52:52

0

這是查詢

SELECT ac.email, ac.username, gr.name 
FROM cs_Accounts AS ac 
LEFT JOIN cs_Permissions AS per ON per.user_id = ac.id 
INNER JOIN cs_Groups AS gr ON per.user_id = gr.id 

你可以,如果你想