Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Exercício 7 - Mais EXISTS - Equivoco em Resposta

Olá,

Vi a dúvida do outro colega nessa mesma questão, considerando que estamos no ano de 2018 e supondo que tenhamos registros na nossa tabela de cursos nos anos de 2016 e 2017; e o exercício nos propõe para mostrar os que tiveram matricula no ano de 2015 (mas lembrando, ainda quiséssemos saber quem fez matricula no ano de 2016 e 2017), como seria uma query performática para nos trazer o filtro correto?

A Query proposta no exercicio foi:

select a.nome from aluno a where not exists (
    select m.id from matricula m where m.aluno_id = a.id and 
    m.data > (select sysdate - interval '1' year from dual));

mas ao meu entender, essa query retira um ano e não nos traria o filtro correto, mostrando nesse cenário, os alunos que não tiveram matriculas no ano anterior, ou seja, 2017.

Como o outro colega disse na sua dúvida, busquei também uma outra query para que eu soubesse exatamente em qual ano não houveram matriculas e ela foi a seguinte:

select a.nome from aluno a where not exists (
select m.id from matricula m where m.aluno_id = a.id and extract (year from data) = 2015
);

Mas também como informado na dúvida já postada, essa query não seria performática para o nosso banco, e por isso a minha dúvida, baseando-se nesses fatos, qual seria a melhor forma para retornar o valor independente do ano que busco e do ano em que eu esteja?

1 resposta
solução!

Olá Mariana, realmente, o enunciado do exercícios está incorreto. O correto seria para buscar todos os alunos que não tiveram nenhuma matrícula no último ano, e não no ano de 2015. Obrigado pelo feedback, assim eu corrigi o exercício.

Sobre a query, você pode usar a que você postou, pois ela retorna o pedido no enunciado antigo do exercício:

select a.nome from aluno a where not exists (
    select m.id from matricula m 
    where m.aluno_id = a.id and 
    extract (year from data) = 2015
);