2012-02-10 75 views
1

我有以下的數據庫模式:如何從1個sql查詢中的4個表中獲取數據?

table courses: 
id 
tutor_id 
title 



table course_categories: 
    id 
    category_id 
    course_id 

table categories: 
    id 
    name 

table tutors: 
    id 
    name 

table subscribers: 
    id 
    course_id 
    user_id 

我需要1個SQL獲得當然與所有它的類別,以及該課程的導師和用戶該課程的數量。這可以在1個查詢中完成嗎?這應該使用存儲過程來完成嗎?

+1

不,不應該使用存儲過程完成。這些用於更新數據,而不是選擇它。 – troelskn 2012-02-10 10:01:16

+0

@troelskn你是認真的嗎?是的,你可以用一個查詢來完成,使用JOINs(你需要多個)。向我們展示你的嘗試。 – vulkanino 2012-02-10 10:03:27

回答

4

有了這個查詢你得到你想要的東西:

select co.title as course, 
     ca.name as category, 
     t.name as tutor, 
     count(s.*) as total_subscribers 
from courses co 
inner join course_categories cc on c.id = cc.course_id 
inner join categories ca on cc.category_id = ca.id 
inner join tutors t on co.tutor_id = t.tutor_id 
left join subscribers s on co.id = s.course_id 
where co.title = 'Cat1' 
group by co.title, ca.name, t.name 

我用left joinsubscribers,因爲有可能是沒有一個給定的course。我假設所有其他表格都有關於每個course,categorietutor的數據。如果沒有,你也可以使用left join,但是你會得到空數據。

+0

謝謝,我該如何過濾數據才能得到像課程 - Cat1,Cat2,...現在我得到2行,如課程Cat1和課程Cat2 – Mythriel 2012-02-10 10:18:08

+0

@VariuSergiu我編輯了我的答案。只需添加一個「where子句」即可。我假設Cat1是課程的標題。 – 2012-02-10 10:22:20

1

它可以完成。你需要查詢select和使用join。見selectjoin,以幫助完成這項任務

+2

和'group by'也 – 2012-02-10 10:04:12

0

選擇cou.title,cat.name,tu.name,計數(sub.user_id)從課程湊,course_categories CCA,貓類,導師恩,訂戶子哪裏湊。 id = cca.id和cat.id = tu.id和tu.id = sub.id組,由cou.title,tu.name;

+0

雖然這段代碼可能是解決方案,但[包括解釋](// meta.stackexchange.com/questions/114762/explaining-entirely-基於代碼的答案)確實有助於提高您的帖子的質量。請記住,您將來會爲讀者回答問題,而這些人可能不知道您的代碼建議的原因。 – peacetype 2018-02-18 03:21:09

相關問題