簡體   English   中英

帶子查詢的SQL查詢-有更好的方法嗎?

[英]SQL Query with Sub-Query - Is there a better way?

對於下面的3個表

學生

StudentId, StudentName
1          aaa
2          bbb
3          ccc

課程

CourseId, CourseName
100       xxx
101       yyy
102       zzz

StudentCourse

StudentId, CourseID
1          100
1          101
2          100
2          102

要為第一個按字母順序選擇參加xxx課程的學生選擇所有課程,我可以編寫以下查詢:

SELECT StudentName, CourseName
FROM Student
INNER JOIN StudentCourse ON Student.StudentId = StudentCourse.StudentID
INNER JOIN Course on StudentCourse.CourseID = Course.CourseID
WHERE StudentName in (
    SELECT TOP 1 StudentName 
    FROM Student 
    INNER JOIN StudentCourse on Student.StudentID = StudentCourse.StudentID
    INNER JOIN Course on StudentCourse.CourseID = Course.StudentID
    WHERE CourseName='xxx' 
    ORDER BY StudentName)

有沒有一種更有效的方式來執行/寫入此操作而無需進行子選擇,因為看來我在兩次執行相同的查詢。

謝謝。

您可以將窗口函數和top (1) with ties

SELECT TOP (1) WITH TIES StudentName, CourseName
FROM (SELECT s.StudentName, c.CourseName,
             SUM(CASE WHEN c.CourseName = 'XXX' THEN 1 ELSE 0 END) OVER (PARTITION BY StudentName) as cnt_xxx
      FROM Student s INNER JOIN
           StudentCourse sc
           ON s.StudentId = sc.StudentID INNER JOIN
           Course c 
           ON sc.CourseID = c.CourseID
     ) sc
WHERE cnt_xxx > 0
ORDER BY StudentName;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM