【发布时间】:2018-05-18 05:09:57
【问题描述】:
当我执行下面的查询时,我没有返回任何结果:
SELECT
S.FirstName, S.LastName, S.StudentId, Y8.SectionId
FROM
SR_Students AS S
INNER JOIN
SR_Student_Classes AS Y7 ON
S.StudentId = Y7.StudentId
AND S.IsActive = 1 AND S.Gender LIKE 'M%'
AND Y7.TermId = 21 AND Y7.CampusId = 1 AND Y7.ClassId = 7 AND Y7.IsActive = 1
INNER JOIN
SR_Student_Classes AS Y8 ON
Y7.StudentId = Y8.StudentId
AND Y8.TermId = 26 AND Y8.CampusId = 7 AND Y7.ClassId = 8 AND Y8.IsActive = 1
但是,当我将其拆分时(如下所示),我返回了 59 行:
; WITH Y7 AS (
SELECT S.StudentId, S.FirstName, S.LastName, C.ClassID, C.SectionId, C.TermID, C.CampusId
FROM
SR_Student_Classes AS C
INNER JOIN SR_Students AS S ON C.StudentId = S.StudentId
WHERE
C.TermId = 21 AND C.CampusId = 1 AND C.ClassId = 7 AND C.IsActive = 1
AND S.Gender = 'M' AND S.IsActive = 1
)
, Y8 AS (
SELECT S.StudentId, S.FirstName, S.LastName, C.ClassID, C.SectionId, C.TermID, C.CampusId
FROM
SR_Student_Classes AS C
INNER JOIN SR_Students AS S ON C.StudentId = S.StudentId
WHERE
C.TermId = 26 AND C.CampusId = 7 AND C.ClassId = 8 AND C.IsActive = 1
AND S.Gender = 'M' AND S.IsActive = 1
)
SELECT
Y8.FirstName, Y8.LastName, Y8.StudentId, Y8.SectionId
FROM
Y7 AS Y7
INNER JOIN
Y8 AS Y8 ON Y7.StudentId = Y8.StudentId
我知道第二个查询是正确的,因为我知道基础数据。
但是为什么第一个查询不起作用?毕竟,它是使用所有内部连接?
我还尝试将第一个查询的大部分内连接条件移到 WHERE 子句中,没有任何区别(考虑到它们是内连接,我没想到会有任何区别)
【问题讨论】:
-
您的两个 CTE 所做的事情与原始查询不同。只需将 CTE 代码内联到您的最终选择中,您就会发现查询有很大不同。现在至于你真正想要哪一个,这由你决定。
标签: tsql inner-join common-table-expression