在单个查询中获得多个结果

时间:2014-04-27 08:21:31

标签: mysql sql

我需要知道学生 - 学生证,姓,姓。那些人没有在特定的礼堂看到过这样的事件。我必须按姓氏升序排列这些学生(通过一个查询)。运行查询两次,在一次运行中显示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

1 个答案:

答案 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'看到事件的学生的必要变更留给读者。

相关问题