2011-04-04 132 views
1

我有三個表。我們稱他們爲a,b和a_to_b。 a_to_b包含(除其他之外)來自a和b的唯一ID以提供a和b之間的聯繫(顯然)。一個看起來是這樣的:幫助一條SQL語句

a_id, max_b, ... 

a_to_b看起來像:

a_id, b_id, ... 

我想創建一個查詢,是這樣的:

select a.a_name, a.max_b, a_to_b.(number of times a_id appears in a_to_b) for a, a_to_b where ... 

只是我不知道正確的問題,要求谷歌找出如何做到這一點。總之,我不關心a_to_b中b_id的個別出現次數,a_id在該表中出現的次數。

我希望能夠看到我想要完成的事情。謝謝您的幫助。

編輯

現在我運行它,我意識到,我很想念查詢的一部分。

這是完整的故事。對不起,以前的誤導。

表A中:

group_id 
other_stuff 

表B:

user_id 
other_stuff 

表A_to_B:

group_id 
user_id 
m_type (int used to determine user's role in the group) 

希望的輸出:

a.group_id, a_to_b.count(of group_id where m_type=4), b.user_id (user_id from a_to_b from the group_id that was grouped where m_type=2) 

再次,我爲轉發道歉。第一次問我時應該更加小心。我希望我對這些東西足夠熟悉,能夠翻譯Rasika給出的東西,但我嘗試了一堆東西,而且mysql一直對我大吼一聲。

更多修改

我沒有什麼Rasika寫道,並與這個爛攤子想出了更多的一些嘗試:

select classes.class_id, classes.spaces - ifnull(dUtC.students,0) as openings, classes.semester_id, dUtC.teacher, users.fname, users.lname from (select teachUtC.class_id as class_id, numUtC.students as students, teachUtC.user_id as teacher from (select class_id, count(*) as students from users_to_classes where participation_level=4 group by class_id) as numUtC right join (select class_id, user_id from users_to_classes where participation_level=2) as teachUtC on teachUtC.class_id=numUtC.class_id) as dUtC, classes, users where users.user_id=dUtC.teacher and dUtC.class_id=classes.class_id 

它的工作原理,但我不禁想,我這樣做錯了......我想知道是否有更清晰的方法來編寫它。

感謝

+0

你可以嘗試將問題提煉到一個更簡單的語句。首先,輸出表應該是什麼樣子?什麼是最簡單的模式,你可以代表你的問題英寸如果你要刪除學生等,那麼完全這樣做。 – jimmyb 2011-04-04 23:31:58

+0

我不確定我是否理解你想提出的建議。我以爲我已經儘可能簡單地佈置了它,但就像我說的,我不知道用文字描述情況的正確詞語 – baiano 2011-04-04 23:37:28

回答

2

你可以使用一個group by一個計數以產生這一點。

select a.a_name, a.max_b, count(*) as num_a_id from a join a_to_b on a.a_id=a_to_b.a_id group by a_id 
+0

這正是我想要做的。我愛這裏的每個人有多快。萬分感謝。 – baiano 2011-04-04 23:57:39