Ir para conteúdo

POWERED BY:

Arquivado

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

rdpacato

é Correto Este SELECT?

Recommended Posts

Pessoal... sou novo em BD, tenho o modelo de BD (postgresql) e tenho que fazer a consulta nestes campos destas tabelas...

 

só que não sei se o relacionamento entre elas (linha = linhaoutratabela) esta correto... pq dados tem se eu tirar a última condição funciona... não sei se tem que usar aqueles JOINs e tal

 

Consulta:

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, Dispositivo, Linha, Processamento, SIMCardDispositivo
WHERE Linha.Numero = 2292713815
AND SIMCard.Numero = SIMCardDispositivo.SIMCard_Numero
AND SIMCardDispositivo.Dispositivo_Numero = Dispositivo.Numero
AND Linha.Numero = SIMCard.NumeroLinha

 

 

Tabelas:

34yb6e9.jpg

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não conhecemos o seu modelo de dados, mas há algumas observações a serem feitas.

 

Você não esta fazendo o JOIN da tabela Processamento.

 

O fato de remover uma linha de JOIN e trazer dados não significa que esta correto, você pode estar gerando um produto cartesiano.

Ao remover a linha isto pode indicar que algo esta digitado errado, como o nome de um campo.

SIMCard.NumeroLinha OU SIMCard.Numero ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

é esta linha.. mas ela se relaciona uma com a outra.. e não tenho a menor ideia de usar JOIN.... sou novato nisso.... não sei vincular as tabelas... sem ser desse jeito que falei

Compartilhar este post


Link para o post
Compartilhar em outros sites

Basicamente a Primary Key (PK) de uma tabela "amarra-se" a Foreing Key (FK) da outra tabela.

Cada tabela refenciada deve ter sua "amarração" feita com as que fazem referência à ela.

No Modelo se vê isto pela "linha" que liga as tabelas.

A SQL passada faz "join" o chamado join implícito.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Prog... isso, mas o numero é do simcard, e o numero linha da linha (FK) da tabela Linha

 

Motta, eu sei mais ou menos isso... só que como os dados da TB Processamento não possuem FK nas outras tb, não sei vincular elas...

 

os campos que preciso fazer a consulta são esses mesmo que passei, eu peguei os campos das suas tb de origem, para na condição WHERE eu vincular....

 

Só que não sei se está correto....

 

Obrigado pela atençaõ de vcs.. preciso mesmo de ajuda

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu fiz isso:

 

 

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, Dispositivo, Linha, Processamento, SIMCardDispositivo
WHERE Linha.Numero = 2292713815
AND SIMCard.Numero = SIMCardDispositivo.SIMCard_Numero
AND SIMCardDispositivo.Dispositivo_Numero = Dispositivo.Numero
AND Linha.Numero = SIMCard.NumeroLinha -- AQUI SE EU TIRAR ELE RETORNA.. É PQ JÁ TO USANDO O SELECT NA LINHA???
AND (SIMCard.CodigoProcessamento = Processamento.Codigo
OR Dispositivo.CodigoProcessamento = Processamento.Codigo)

Compartilhar este post


Link para o post
Compartilhar em outros sites

É que ele pode ter sido inserido por uma fonte (SIMCard ou por Dispositivo) e pode ser que esteja em um ou no outro...

 

cara to perdidindo ocm esse select...



Amigos.. eu resolvi com uma ajuda aqui do pessoal.. era por causa de regras de inserção que o registro não estava gravando.. o primeiro select ta funcionando normal...

 

muito obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ainda está com problema, estão resolvendo.

Depois eu ponho.

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.