繁体   English   中英

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

[英]Getting multiple results in a single query

我需要知道学生-学生证,名字,姓氏。 那些没有在特定的礼堂看到任何事件。 我必须按姓氏升序列出这些学生(通过一个查询)。 两次运行查询,一次运行显示礼堂“伦敦剧院”,第二次运行显示“布伦特伍德音乐厅”的结果。

我不知道这第一和第二轮意味着什么。 另外,请检查以下内容是否可以首次运行。 我正在考虑创建一个视图并存储第一个运行,并使用“ 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

输入: -

礼堂

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

正如@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示例
让未看过'Brentwood Hall'活动的学生得到必要的改变,留给读者练习。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM