Ir para conteúdo

Arquivado

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

rdpacato

melhorar consulta postgresql

Recommended Posts

Pessoal....

 

Alguem poderia me ajudar a "melhorar" minha consulta... é que teria que de certa maneira, trazer resultados, mesmo tendo só em uma tabela.... eu consutl na tb SIMCARD e na DISPOSITIVO, as mais importantes.... só que pode ser que ele não tenha valores em uma delas... e do jeito que ta, ele não retorna valor se não possuir...

 

como faço para consultar ??

 

SELECT DISTINCT (Dispositivo.Numero) AS Dispositivo,
(Dispositivo.CodigoTecnologia) AS CodTecnologia,
(Dispositivo.CodigoAPNConfigurada) AS APNConfigurada,
(SIMCard.Numero) AS SIMCard,
(Linha.Numero) AS Linha,
(SIMCard.CodigoOperadora) AS Operadora,
(SIMCard.CodigoAPNProvisionada) AS APNProvisionada,
(SIMCard.CodigoStatusSIMCard) AS StatusSIMCard,
(Processamento.CodigoFonteDados) AS Fonte,
(Dispositivo.IMEI) AS IMEI,
(SIMCard.IMSI) AS IMSI,
(Linha.CodigoStatusLinha) AS StatusLinha,
(SIMCard.ConsumoDados) AS ConsDados,
(Processamento.MatriculaCadastro) AS Matricula
FROM SIMCard, Dispositivo, Linha, Processamento, SIMCardDispositivo
WHERE Dispositivo.Numero = (?::varchar)
WHERE SIMCard.Numero = (?::varchar)::numeric
WHERE Linha.Numero = (?::varchar)::numeric
AND SIMCard.Numero = SIMCardDispositivo.SIMCard_Numero
AND SIMCardDispositivo.Dispositivo_Numero = Dispositivo.Numero
AND Linha.Numero = SIMCard.NumeroLinha

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

O próprio que tem lá, apesar de simples.

 

 

SELECT *
    FROM weather LEFT OUTER JOIN cities ON (weather.city = cities.name);

Veja na síntaxe que permite mais de um join.

 

Das tabelas

SIMCard, Dispositivo, Linha, Processamento, SIMCardDispositivo

 

Quais seriam a "base" (Linha ?) da consulta e quais as dependentes ?

 

SIMCard, Dispositivo podem não existir ? São mutualmente excludentes ? usam "os mesmos" campos ?

Uma view unindo as duas podria simplificar a query ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

se a consulta for por simcard ou linha ok, são do mesmo relacionamento... mas se for por dispositivo é por outro, então são essas duas opções, pode ter em um dos dois relacionamentos ou apenas em um... eu queria separar estes dois SIMCARD/LINHA e DISPOSITIVO

Compartilhar este post


Link para o post
Compartilhar em outros sites


SELECT * FROM Linha

LEFT OUTER JOIN SIMCard ON ....

LEFT OUTER JOIN Dispositivo ON ....

LEFT OUTER JOIN rocessamento ON ....

LEFT OUTER JOIN SIMCardDispositivo ON ....


mas eu nunca uso ests síntaxe, no Oracle o outer join é diferente

Compartilhar este post


Link para o post
Compartilhar em outros sites

Motta, fiz assim:

SELECT DISTINCT (Dispositivo.Numero) AS Dispositivo,
(Dispositivo.CodigoTecnologia) AS CodTecnologia,
(Dispositivo.CodigoAPNConfigurada) AS APNConfigurada,
(SIMCard.Numero) AS SIMCard,
(Linha.Numero) AS Linha,
(SIMCard.CodigoOperadora) AS Operadora,
(SIMCard.CodigoAPNProvisionada) AS APNProvisionada,
(SIMCard.CodigoStatusSIMCard) AS StatusSIMCard,
(Processamento.CodigoFonteDados) AS Fonte,
(SIMCard.DataAlteracao) AS DtAlteracao,
(Dispositivo.IMEI) AS IMEI,
(SIMCard.IMSI) AS IMSI,
(Linha.CodigoStatusLinha) AS StatusLinha,
(SIMCard.ConsumoDados) AS ConsDados,
(Processamento.MatriculaCadastro) AS Matricula
FROM SIMCard, Linha, Processamento LEFT JOIN Dispositivo LEFT JOIN SIMCardDispositivo ON
Dispositivo.Numero = '001070675'
AND SIMCard.Numero = SIMCardDispositivo.SIMCard_Numero
AND SIMCardDispositivo.Dispositivo_Numero = Dispositivo.Numero
AND Linha.Numero = SIMCard.NumeroLinha

 

Só que ta dando erro:

ERRO: erro de sintaxe no fim da entrada
LINE 20: AND Linha.Numero = SIMCard.NumeroLinha
^

********** Error **********

ERRO: erro de sintaxe no fim da entrada
SQL state: 42601
Character: 890

Compartilhar este post


Link para o post
Compartilhar em outros sites


LEFT JOIN Dispositivo ON <join de Dispositivo >

LEFT JOIN SIMCardDispositivo ON <join de SIMCardDispositivo >

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Consegui...

 

 

 

SELECT DISTINCT (Dispositivo.Numero) AS Dispositivo, 
(SELECT Dominio.Nome FROM Dominio WHERE Dominio.Codigo = Dispositivo.CodigoTecnologia) AS CodTecnologia, 
(SELECT Dominio.Nome FROM Dominio WHERE Dominio.Codigo = Dispositivo.CodigoAPNConfigurada) AS APNConfigurada, 
(SIMCard.Numero) AS SIMCard, 
(Linha.Numero) AS Linha, 
(SELECT Dominio.Nome FROM Dominio WHERE Dominio.Codigo = SIMCard.CodigoOperadora) AS Operadora, 
(SELECT Dominio.Nome FROM Dominio WHERE Dominio.Codigo = SIMCard.CodigoAPNProvisionada) AS APNProvisionada, 
(SELECT Dominio.Nome FROM Dominio WHERE Dominio.Codigo = SIMCard.CodigoStatusSIMCard) AS StatusSIMCard, 
(SELECT Dominio.Nome FROM Dominio WHERE Dominio.Codigo = Processamento.CodigoFonteDados) AS Fonte, 
(Processamento.dataProcessamento) AS DtAlteracao, 
(Dispositivo.IMEI) AS IMEI, 
(SIMCard.IMSI) AS IMSI, 
(SELECT Dominio.Nome FROM Dominio WHERE Dominio.Codigo = Linha.CodigoStatusLinha) AS StatusLinha, 
(SIMCard.ConsumoDados) AS ConsDados, 
(SIMCard.MatriculaAlteracao) AS Matricula 
FROM Dispositivo LEFT JOIN SimcardDispositivo ON SimcardDispositivo.Dispositivo_numero = Dispositivo.Numero 
LEFT JOIN SIMCard ON SIMCard.Numero = SIMCardDispositivo.SIMCard_Numero 
LEFT JOIN Linha ON Linha.Numero = SIMCard.NumeroLinha 
LEFT JOIN Processamento ON (Processamento.Codigo = SIMCard.CodigoProcessamento OR Processamento.Codigo = Dispositivo.CodigoProcessamento) 
WHERE (

 

 

Alguem pode colocar como resolvido??

 

obrigado

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.