所以我有两张桌子:
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)?我似乎无法想办法做到这一点。提前谢谢!
答案 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';