Реестры, удвоенные в query используя SQL Server

Я хочу, чтобы в месяце он показал поле EstadoMateria таблицы AlumnoMateria без дублированных реестров, и которые не, что он ничего не показал, как он сделан на фотографии ожидаемого результата.

Это консультация результата, полученного (которая функционирует хорошо)

select IdMateria,NombreMateria
from Materias m
where not exists (select null
                 from AlumnoMaterias am
                where am.idMateria = m.idMateria
                  and am.EstadoMateria in ('aprobado', 'regularizado'))

Эту консультацию сделал я пробуя решать мою проблему, оно не функционирует, потому что он приносит дублированные и несуществующие реестры.

select Materias.IdMateria,NombreMateria,AlumnoMaterias.EstadoMateria
      from Materias,AlumnoMaterias
      where Materias.IdMateria not in
        (SELECT IdMateria
        FROM AlumnoMaterias
        WHERE (EstadoMateria='Aprobado' or EstadoMateria='Regularizado'))

introducir la descripción de la imagen aquí

introducir la descripción de la imagen aquí

1
задан 07.01.2017, 00:44
0 ответов

В личном и по причине результата я предпочитаю строить консультации посредством JOIN, для чего, продолжая твой ожидаемый результат он использовал бы следующий query:

SELECT M.IdMateria, M.NombreMateria, AM.EstadoMateria
FROM Materias M
    LEFT JOIN AlumnoMaterias AM 
        ON M.IdMateria = AM.IdMateria

Обновление

Ты можешь проверять результаты здесь

1
ответ дан 03.12.2019, 17:51

Пробуй с этим:

select distinct m.IdMateria,NombreMateria,am.EstadoMateria
from Materias m,AlumnoMaterias am
where not exists (select null
             from AlumnoMaterias am
             where am.idMateria = m.idMateria
             and am.EstadoMateria in ('aprobado', 'regularizado'));

практически то, что он изменил, состояло в том, чтобы добавлять слово distinct в query, что предотвратит дублированные реестры.

0
ответ дан 03.12.2019, 17:51
Esta era mi solucion. El left join y le agregue una subconsulta.

Он приносит мне все материи Материй, но исключает мне материи, которые находятся в tbl alumnomaterias с одобренным или упорядоченным состоянием, и он показывает состояние материй, которые вписаны или осуждены, так как тех, которые приняты или осуждены в этом случае, он не хотел увидеть. Благодаря всем они помогли мне muucho.

SELECT M.IdMateria, M.NombreMateria, AM.EstadoMateria,NroAlumno
FROM Materias M
LEFT JOIN AlumnoMaterias AM 
    ON M.IdMateria = AM.IdMateria AND NroAlumno=2016009
    where  (M.IdMateria not in (SELECT IdMateria
                        FROM AlumnoMaterias
                        WHERE  EstadoMateria='Aprobado' or EstadoMateria='regularizado'))
0
ответ дан 03.12.2019, 17:51