ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

Retirar subselect do SQL Firebird

 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Banco de Dados
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
adriano_servitec
Colaborador
Colaborador


Registrado: Sexta-Feira, 30 de Janeiro de 2004
Mensagens: 17618

MensagemEnviada: Sex Mar 29, 2019 2:57 pm    Assunto: Retirar subselect do SQL Firebird Responder com Citação

Tem como retirar o subselect deste select, deixando em apenas um só
Código:
SELECT s.codigo,
       s.nome,
       s.preco_de_venda
  FROM servicos s,
     relatorios_conf rc
WHERE s.codigo NOT IN
    (SELECT vi.codigo_pedido
     FROM vendas v
     inner join vendas_itens vi on vi.codigo = v.codigo
     WHERE vi.tipo_pedido = 'Serviço'
       AND v.data_hora BETWEEN :D1 AND :D2
       AND vi.item_cancelado = 'Nao'
       AND v.cancelado IS NULL
       AND v.tipo IS NULL
       AND vi.tipo_pedido <> 'Divida')
ORDER BY codigo


Firebird 2.5
_________________
Jogo seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.drumsetfree
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11666

MensagemEnviada: Sex Mar 29, 2019 5:29 pm    Assunto: Responder com Citação

Boa tarde,

Você está tendo algum problema com essa forma?
Não sei se vai atender a sua necessidade mas segue uma sugestão utilizando o Exists:

Código:
WHERE NOT EXISTS
    (SELECT vi.codigo_pedido
     FROM vendas v
     inner join vendas_itens vi on vi.codigo = v.codigo
     WHERE vi.tipo_pedido = 'Serviço'
       AND v.data_hora BETWEEN :D1 AND :D2
       AND vi.item_cancelado = 'Nao'
       AND v.cancelado IS NULL
       AND v.tipo IS NULL
       AND vi.tipo_pedido <> 'Divida'
       AND vi.codigo_pedido = s.codigo)


Espero que ajude


Editado pela última vez por imex em Seg Set 20, 2021 10:14 am, num total de 1 vez
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
adriano_servitec
Colaborador
Colaborador


Registrado: Sexta-Feira, 30 de Janeiro de 2004
Mensagens: 17618

MensagemEnviada: Seg Abr 01, 2019 10:28 am    Assunto: Responder com Citação

imex escreveu:
Boa tarde,

Você está tendo algum problema com essa forma?
Não sei se vai atender a sua necessidade mas segue uma sugestão utilizando o Exists:

Código:
WHERE NOT EXISTS
    (SELECT vi.codigo_pedido
     FROM vendas v
     inner join vendas_itens vi on vi.codigo = v.codigo
     WHERE vi.tipo_pedido = 'Serviço'
       AND v.data_hora BETWEEN :D1 AND :D2
       AND vi.item_cancelado = 'Nao'
       AND v.cancelado IS NULL
       AND v.tipo IS NULL
       AND vi.tipo_pedido <> 'Divida'
       AND vi.codigo_pedido = s.codigo)


Espero que ajude


Obrigado Imex. Melhorou a performance desta forma.
_________________
Jogo seu smartphone? Acesse o link e confira.
https://play.google.com/store/apps/details?id=br.com.couldsys.rockdrum
https://play.google.com/store/apps/details?id=br.com.couldsys.drumsetfree
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Banco de Dados Todos os horários são GMT - 3 Horas
Página 1 de 1

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB