2014-01-23 66 views
0

大家好,我想統計一些條目,但是我不知道是否可以用連接來完成。這種情況是mysql count related table

我有一個表

student_profile

Id | Name 
--------- 
1 | Name1 
2 | Name2 
3 | Name3 

student_application其中PROFILE_ID就是student_profile.id

 Id | profile_id | Data 
    ---------------------- 
    1  2   data1 
    2  2   data2 
    3  2   data3 

而且表student_holiday相關

Id | app_id | date 
----------------------- 
1  2  2014-01-01 
2  3  2014-02-02 

所以我讓我所有的student_application的與

Select sa.id, s.name From student_application sa 
INNER JOIN student_profile s ON s.id = sa.profile_id 

我想看看有多少假期有學生,但我不student_holiday表已經PROFILE_ID。我有app_id,所以我不能左連接student_holiday sh ON sh.app_id = sa.id,這不會給出正確的數字。

這裏sqlfiddle

預先感謝任何幫助。

+0

因此,有沒有關係'student_holiday'表和其他兩個之一? – Tony

+0

否student_holiday和student_application,student_holiday.app_id = student_application.id之間有關係,另一個與student_profile.id = student_application.profile_id有關係,結果必須是這樣的:Name2 | count(2),Name2 | count(2 ),Name2 | count(2),3次,因爲我有3個應用程序爲該學生和這個配置文件有2個假期,我希望這是有道理的 – Alex

回答

0

 
SELECT student_profile.ID, student_profile.Name, student_holiday.ID 
FROM (student_profile INNER JOIN student_holiday ON student_profile.ID = student_holiday.ID) INNER JOIN student_application ON student_holiday.ID = student_application.ID; 

在這裏你去!按照上面的指示匹配所有表中的ID,這是獲得假期的關鍵。

或與PROFILE_ID

 
**SELECT student_profile.ID, student_profile.Name, student_holiday.ID 
FROM (student_profile INNER JOIN student_holiday ON student_profile.ID = student_holiday.ID) INNER JOIN student_application ON Trim(student_holiday.ID) = 
student_application.profile_id;** 
+1

他提供了一個sqlfiddle,你所要做的就是將這些解決方案插入它看到他們不工作 –

+0

這些查詢不起作用。我強烈建議不要回答問題,因爲你一直認爲只是猜測而不是測試。 – LittleBobbyTables

0

這裏是第三個表的數據相匹配加盟:

Select s.name, sa.some_data as application_data,h.some_data as holiday_data 
From student_application sa 
INNER JOIN student_profile s ON s.id = sa.profile_id 
INNER JOIN student_holiday h ON h.app_id = sa.id; 

注意這隻會返回與關聯度假的應用程序記錄。

然後算來,我們只是:

Select s.name, sa.some_data as application_data,count(h.some_data) as holiday_data 
From student_application sa 
INNER JOIN student_profile s ON s.id = sa.profile_id 
INNER JOIN student_holiday h ON h.app_id = sa.id 
GROUP BY s.name 

注意這個答案是基於你在sqlfiddle使用的字段名(數據= some_data和日期= some_data)