2011-07-21 26 views
-1

所以我有2個表:只有SQL SELECT當所有項目匹配

Courses: 
-course_ID (primary key) 
-course_code 
-title 

Sections: 
-section_ID (primary key) 
-course_ID (foreign key) 
-day

每門課程都有一個數字,屬於它的部分。我們來舉一個例子。

的表格:

course_ID course_code title 
1   ABC   Title1 
2   BBC   Title2 

section_ID course_ID day 
1    1   Monday 
2    1   Tuesday 
3    2   Monday 
4    2   Monday 

我希望能夠運行,要求該給我只有在所有的部分符合特定標準的那些所有課程的查詢。因此,在這種情況下,假設我想看到「週一所有課程都有所有課程」。期望的輸出是:

course_ID course_code title section_ID day 
2   BBC   Title2 3    Monday 
2   BBC   Title2 4    Monday 

請注意,條目(2,ABC,Title1,1,Monday)是如何省略的?我似乎無法想出一個辦法來做到這一點。提前致謝!

+1

你到目前爲止做了什麼? - 另外,如果功課,你應該在標籤中指定... – Randy

回答

0

也許選擇不存在的課程(除符合條件的部分以外的所有部分)?

+0

如果需要,我也可以幫助您使用語法。這是一個使用集合差異和NOT EXISTS的基於子查詢的解決方案。 – Patrick87

+0

有兩個單詞:[antijoin](http://en.wikipedia.org/wiki/Relational_algebra#Antijoin_.28.E2.96.B7.29);) – onedaywhen

1

試試這個:

SELECT * 
    FROM courses c1 
WHERE NOT EXISTS 
(
    SELECT 1 
     FROM sections c2 
     WHERE c1.course_id = c2.course_id 
     AND c2.day <> 'Monday' 
) 
0
SELECT c.* 
FROM Courses c 
WHERE NOT EXISTS (SELECT NULL FROM 
        Sections s 
        WHERE Day <> Monday 
        and s.CourseID = c.CourseID) 
1
SELECT * FROM Courses WHERE course_ID NOT IN (SELECT DISTINCT course_ID FROM Sections WHERE day != 'Monday') 
+0

如果你投下了,你會介意留下一個評論,解釋爲什麼?查詢會給他他想要的結果^^ –

0
select * from Sections s1 
    where not exists (
     select 1 from Sections s2 
      where s1.course_ID = s2.course_ID and s1.day <> s2.day) 

它說拉的所有部分,其中同一課程下一個記錄不具有不同的一天。這意味着只要日期相同,您就可以獲得單個記錄以及多個記錄。

0

您應該選擇day ='Monday'的所有部分,並從該結果中,輕鬆加入課程表以獲取課程。

select distinct c.course_id 
    from Courses c 
     inner join Sections s on s.course_id = c.course_id 
    where s.day = 'Monday'; 
相關問題