我需要知道学生 - 学生证,姓,姓。那些人没有在特定的礼堂看到过这样的事件。我必须按姓氏升序排列这些学生(通过一个查询)。运行查询两次,在一次运行中显示Auditorium“伦敦剧院”的结果,在第二次运行中显示“Brentwood Hall”的结果。
我不知道这第一次和第二次运行意味着什么。另外,请检查以下是否适用于首次运行。我正在考虑创建一个视图并存储第一次运行,并用" Brentwood Hall"编写相同的查询。并将其存储在第二个视图中。但是,如何将2个视图作为同一查询的一部分显示呢?
SELECT op.StudentID
, s.FirstName
, s.LastName
FROM auditorium a
JOIN audievent e
ON a.auditoriumID = e.AuditoriumID
JOIN reserver r
ON e.EventID = r.EventID
JOIN OrderProcessor op
ON r.OrderID = op.OrderID
JOIN Student s
ON op.StudentID = s.StudentID
WHERE op.StudentID NOT IN ( SELECT DISTINCT op.StudentID
FROM OrderProcessor op
LEFT
JOIN reserver r
ON op.OrderID = r.OrderID
LEFT
JOIN AudiEvent e
ON r.AuditoriumID = e.AuditoriumID
WHERE e.EventID NOT IN ( SELECT EventID FROM reserver)
)
AND a.AuditoriumName = 'London Theatre'
GROUP
BY op.StudentID;
输出: -
StudentID FirstName LastName
ID1 Andy Hall
ID2 Andy Halls
ID3 Mush Peters
ID4 Garry Hiegl
INPUT: -
礼堂
AudiID AudiName
Audi01 London Theatre
Audi02 Brentwood Hall
Audi03 County Hall
AudiEvent
EventID AudiID
1 Audi01
2 Audi01
3 Audi01
4 Audi01
5 Audi01
6 Audi01
7 Audi01
8 Audi01
9 Audi01
10 Audi01
11 Audi02
12 Audi02
13 Audi02
14 Audi02
15 Audi02
16 Audi03
17 Audi03
18 Audi03
19 Audi03
20 Audi03
储池
ReserverID OrderID AudiID EventID
1 1 Audi01 1
2 1 Audi01 2
3 2 Audi01 3
4 2 Audi01 4
5 2 Audi02 14
6 3 Audi02 15
7 3 Audi02 11
8 4 Audi03 18
9 4 Audi03 19
10 4 Audi03 20
订单处理器
OrderID StudentID
1 ID01
2 ID02
3 ID03
4 ID04
学生
StudentID FirstName LastName
ID1 Andy Hall
ID2 Andy Halls
ID3 Mush Peters
ID4 Garry Hiegl
答案 0 :(得分:1)
正如@wildplasser所说,NOT EXISTS
完美:
SELECT studentId, student.firstName, student.lastName
FROM Student
WHERE NOT EXISTS (SELECT 1
FROM OrderProcessor
JOIN Reserver
ON Reserver.orderId = OrderProcessor.orderId
JOIN AudiEvent
ON AudiEvent.eventId = Reserver.eventId
JOIN Auditorium
ON Auditorium.audiId = AudiEvent.audiId
AND Auditorium.audiName = 'London Theatre'
WHERE OrderProcessor.studentId = Student.studentId)
(工作SQL Fiddle example)
让那些没有在'Brentwood Hall'
看到事件的学生的必要变更留给读者。