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 

Dúvida "cross apply" SQL Server.

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


Registrado: Segunda-Feira, 27 de Julho de 2015
Mensagens: 70

MensagemEnviada: Sex Set 01, 2017 12:54 am    Assunto: Dúvida "cross apply" SQL Server. Responder com Citação

Pessoal, o problema o qual eu vou relatar agora já foi resolvido, porém, estou fazendo esse post pra ver se alguém me ajuda a entender porquê não funciona de um jeito e do outro funciona. Abaixo tenho a mesma query 2 vezes, só que com um pequeno detalhe;

1ª situação(NÃO FUNCIONA):
Código:

SELECT     B.ID AS IDCERCAELETRONICA, B.DESCRICAO AS DESCRICAOCERCA, A.TIPORESTRICAO, A.ID, A.OK, A.OKAUX, A.ATIVA, A.ENVIARALERTA, C.ID AS IDVEICULO, C.IDENTIFICACAO,
                      D .METODOALERTA, D .ID AS IDCLIENTE, D .NOMERAZAO AS NOMECLIENTE, D .TELEFONE1 AS CELULARCLIENTE, E.LATITUDE, E.LONGITUDE, E.IDMOTORISTA, E.DATAHORAORIGINAL,
                      E.VELOCIDADE, E.MOVENDO, E.IGNICAO
FROM         CERCAELETRONICAVINCULACAO A INNER JOIN
                      CERCAELETRONICA B ON A.IDCERCAELETRONICA = B.ID INNER JOIN
                      VEICULOS C ON A.IDVEICULO = C.ID INNER JOIN
                      CLIENTES D ON C.IDCLIENTE = D .ID CROSS APPLY
                          (SELECT     TOP 1 V.*
                            FROM          VWATUALIZACOES AS V
                            WHERE      V.IDVEICULO = C.ID AND V.SATELITAL = 0
                            ORDER BY V.DATAHORAORIGINAL DESC) AS E
WHERE     A.ATIVA = 1


2ª situação(FUNCIONA):
Código:

SELECT     B.ID AS IDCERCAELETRONICA, B.DESCRICAO AS DESCRICAOCERCA, A.TIPORESTRICAO, A.ID, A.OK, A.OKAUX, A.ATIVA, A.ENVIARALERTA, C.ID AS IDVEICULO, C.IDENTIFICACAO,
                      D .METODOALERTA, D .ID AS IDCLIENTE, D .NOMERAZAO AS NOMECLIENTE, D .TELEFONE1 AS CELULARCLIENTE, E.LATITUDE, E.LONGITUDE, E.IDMOTORISTA, E.DATAHORAORIGINAL,
                      E.VELOCIDADE, E.MOVENDO, E.IGNICAO
FROM         CERCAELETRONICAVINCULACAO A INNER JOIN
                      CERCAELETRONICA B ON A.IDCERCAELETRONICA = B.ID INNER JOIN
                      VEICULOS C ON A.IDVEICULO = C.ID INNER JOIN
                      CLIENTES D ON C.IDCLIENTE = D .ID CROSS APPLY
                          (SELECT     TOP 1 V.*
                            FROM          VWATUALIZACOES AS V
                            WHERE      V.IDVEICULO = A.IDVEICULO AND V.SATELITAL = 0
                            ORDER BY V.DATAHORAORIGINAL DESC) AS E
WHERE     A.ATIVA = 1


Na primeira query eu usei o campo ID da tabela VEICULOS na cláusula where dentro do cross apply, mas da timeout e a query não retorna, fica rodando a vida toda até dar timeout e sem retorno, mesmo que seja pra retornar 1 linha.

Na segunda eu usei o campo IDVEICULO da tabela CERCAELETRONICAVINCULACAO e rodou instantâneo, roda quase que num piscar de olhos.

Por que a primeira query não funciona?

Abs a todos.
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