Когда я соединяю 3 таблицы в 1 запросе, я не получаю результатов;но когда я разделяю их как CTE, я могу получить результаты? - PullRequest
0 голосов
/ 18 мая 2018

Когда я выполняю запрос, приведенный ниже, я не получаю никаких результатов:

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

Я знаю, что второй запрос правильный, потому что я знаю основные данные.

Но почему первый запрос не работает?В конце концов, это все внутренние соединения?

Я также пытался переместить большинство условий внутреннего соединения 1-го запроса в предложение WHERE, это не имело никакого значения (учитывая, что они являются внутренними объединениями, я не ожидал никакой разницы)

1 Ответ

0 голосов
/ 18 мая 2018

Похоже, вы неправильно набрали второе соединение.Y7.ClassId = 8 должно быть Y8.ClassId = 8

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 Y8.ClassId = 8 AND Y8.IsActive = 1 
...