2012-04-17 92 views
2

我正在嘗試編寫一條SQL語句來查找表中的所有行,對於一個字段包含相同的值。但是,我只想返回具有不同值的單獨屬性的值。這有點難以解釋。SQL返回一個字段包含相同數據但其他數據不同的行的行

我與模式的表師:

TeacherName varchar(50) 
CourseN  int 
Quarter  varchar(50) 

這三個領域的結合彌補了主鍵,因此只要季度不同的同一個老師可以教同一門課程。我試圖解決的問題是,我該如何返回所有教授至少兩門不同課程(不分季度)的所有教師的姓名?

這是一個實驗室,我一直在試圖解決這個問題的一個星期左右,我只是無法弄清楚,所以我想我會來到這裏。前面的問題要求找到至少兩次教授相同課程的教師姓名清單。我想出了這個:

SELECT DISTINCT [TeacherName] 
FROM   [Teacher] 
GROUP BY  [TeacherName], 
       [CourseN] 
HAVING COUNT([CourseN]) >= 2 

不過我想現在要解決的問題是相似的,但同樣,我只需要誰在表中不止一次教導至少兩個不同的課程更顯示教師。我真的很感謝一些指導,而不僅僅是答案,因爲重要的是我能夠準確理解數據庫在做什麼。

+0

哪個部分你需要幫助/指導? – RBarryYoung 2012-04-17 04:03:11

+0

搞清楚如何編寫我需要的SQL。我試圖解決這個問題時經歷了許多思考過程。 我想我首先需要一種方法來區分在相同課程中出現兩次的教師,以及在不同課程中出現兩次的教師。我寫了一個這樣的查詢: 「選擇不同的教師姓名,老師命令由教師姓名coursen」。 這結合了教授同一課程的教師隊伍,我認爲這是一個很好的開始。但是,現在我完全停留在如何將此用作子查詢來僅返回那些教師。 – 2012-04-17 04:10:20

回答

3

你應該能夠得到清晰的列表,而不必在這種情況下使用DISTINCT這個詞,特別是如果它可以是「不分季度」。從本質上講,您只需要在子查詢表中具有> = 2行的教師每個唯一的teacher-coursen編號組合具有1行。

select TeacherName 
from (
    select TeacherName, CourseN 
    from Teacher 
    group by TeacherName, CourseN 
    ) t1 
group by TeacherName 
having count(*) >=2 
+0

是的,這正是我所要找的,謝謝。我知道我的思維過程是正確的,將教授多種(不同)課程的教師與教相同課程兩次的教師隔離開來,然後從那裏拉出教師名字。 我只是無法弄清楚我的生活正確的形式/語法。再次感謝! (事實上,我已經嘗試做幾乎完全相同的事情,我沒有意識到我需要爲該子查詢指定標籤!) – 2012-04-17 04:18:05

相關問題