rastrack Novato
Registrado: Segunda-Feira, 27 de Julho de 2015 Mensagens: 70
|
Enviada: Sex Set 01, 2017 12:54 am Assunto: Dúvida "cross apply" SQL Server. |
|
|
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. |
|