仅在所有项匹配时才进行SQL SELECT

时间:2011-07-21 13:50:02

标签: sql database

所以我有两张桌子:

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)?我似乎无法想办法做到这一点。提前谢谢!

6 个答案:

答案 0 :(得分:1)

试试这个:

SELECT  *
  FROM courses c1
WHERE NOT EXISTS
(
    SELECT 1
      FROM  sections c2
      WHERE c1.course_id = c2.course_id
       AND  c2.day <> 'Monday' 
)

答案 1 :(得分:1)

SELECT * FROM Courses WHERE course_ID NOT IN (SELECT DISTINCT course_ID FROM Sections WHERE day != 'Monday') 

答案 2 :(得分:0)

也许选择不存在的课程(除了符合条件的部分以外的所有部分)?

答案 3 :(得分:0)

SELECT c.*
FROM Courses c
WHERE NOT EXISTS (SELECT NULL FROM 
                  Sections s
                  WHERE Day <> Monday
                  and s.CourseID = c.CourseID)

答案 4 :(得分: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)

它说要拉出同一课程下的记录没有不同日期的所有部分。这意味着只要天数相同,您就可以获得单个记录以及多个记录。

答案 5 :(得分:0)

你应该选择day ='Monday'的所有部分,并且从那个结果中,很容易加入Courses表来获得课程。

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