Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

michel_sinclair

subtrair resultado entre consultas

Recommended Posts

Amigos, sou novo no fórum.. procurei algo parecido mas não encontrei. agradeço desde já pela ajuda.

 

Estou quebrando a kbeça para fazer o seguinte: preciso tirar da consulta 1 todos os alunos constantes na consulta 2

 

 

consulta 1:

Na consulta abaixo eu listo todos os alunos cadastrados.

 

select * from alunos, pedidocurso, itenscurso, produtos where alunos.cod_aluno = pedidocurso.id_aluno and pedidocurso.id_pedidocurso = itenscurso.id_pedido and itenscurso.id_produto = produtos.id_produto and produtos.tipo = 1 and alunos.situacao = 0 order by produtos.nome_produto, alunos.nome_aluno

 

consulta 2:

Nesta consulta eu seleciono somente os que estão em atraso

 

select * from alunos, pedidocurso, itenscurso, produtos, financeiro where alunos.cod_aluno = pedidocurso.id_aluno and pedidocurso.id_pedidocurso = itenscurso.id_pedido and itenscurso.id_produto = produtos.id_produto and produtos.tipo = 1 and financeiro.id_pedido = pedidocurso.id_pedidocurso and alunos.situacao = 0 and financeiro.data_vencimento < '04/08/2011' and financeiro.quitado = 'Não' order by financeiro.quitado, produtos.nome_produto, alunos.nome_aluno

 

Obs.: Lembro que tenho alunos que a data de vencimento é futura, por este motivo é que preciso listar primeira todos e depois listar os atrasados... preciso somente retirar os alunos com mensalidade atrasada da consulta2 que aparecem na consulta1

 

Agradeço desde já pela ajuda.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Voce pode fazer de duas maneiras. A primeira é eliminando os alunos da consulta 2 na consulta 1:

 

select * from alunos, pedidocurso, itenscurso, produtos 
where alunos.cod_aluno = pedidocurso.id_aluno 
and pedidocurso.id_pedidocurso = itenscurso.id_pedido 
and itenscurso.id_produto = produtos.id_produto 
and produtos.tipo = 1 
and alunos.situacao = 0 

and (not alunos.cod_aluno in 
   (select alunos.cod_aluno from alunos, pedidocurso, itenscurso, produtos,
    financeiro 
    where alunos.cod_aluno = pedidocurso.id_aluno 
      and pedidocurso.id_pedidocurso = itenscurso.id_pedido 
      and itenscurso.id_produto = produtos.id_produto 
      and produtos.tipo = 1 
      and financeiro.id_pedido = pedidocurso.id_pedidocurso 
      and alunos.situacao = 0 
      and financeiro.data_vencimento < '04/08/2011' 
      and financeiro.quitado = 'Não'))
order by produtos.nome_produto, alunos.nome_aluno

 

Dependendo da quantidade de informações pode não funcionar, e não é uma solução que vai te trazer bom desempenho, ela é meio lenta.

 

Todo aluno seu tem registro na "Financeiro"? se sim, pode utilizar o seguinte comando:

 

select * from alunos, pedidocurso, itenscurso, produtos, financeiro 
where alunos.cod_aluno = pedidocurso.id_aluno 
and pedidocurso.id_pedidocurso = itenscurso.id_pedido 
and itenscurso.id_produto = produtos.id_produto 
and produtos.tipo = 1 
and financeiro.id_pedido = pedidocurso.id_pedidocurso 
and alunos.situacao = 0 

and ((financeiro.data_vencimento < '04/08/2011' and financeiro.quitado = 'Sim')
or (financeiro.data_vencimento > '04/08/2011'))

order by financeiro.quitado, produtos.nome_produto, alunos.nome_aluno

 

Espero ter ajudado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.