Usuário com melhor resposta
Verificar registros nao usados

Pergunta
-
Ola amigos,
Tenho uma tabela de logradouros com mais de 5 mil nomes de ruas.
E tem uma outra tabela onde o PK_ID dessa tabela logradouros é utilizadas,
o que eu preciso é saber na tabela de destino quais os logradouros que não estão sendo usados.
Exemplo:
tabela logradouros = tblGTKLogradouros
( estão cadastradas todos os logradouros)
Tabela localização = tblGTKLocalizacao
( estão cadastrados endereços de pessoas com o PK_ID da tabela logradouros, ou seja na tabela tblGTKLocalizacao, tem um FK_tblGTDLogradouros_Nome, que são os nomes de ruas cadastrados na tabela logradouros, porem não são todos os logradouros que estão sendo usados na tabela localização, e é isso que preciso saber.
Todos os logradouros que não estão sendo usados na tabela de localização.
Obrigada
Respostas
-
Ele está correto.
Certeza que ele está trazendo informações que constam na 2 tabelas?
Coloca na 1ª linha do select o seguinte:select tblwrilogradouros.PK_Id, tblwrilogradouros.Logradouro, tblwrilocalizacao.FK_tblWRILogradouros_Id
e verifique se ele está retornando algum valor nessa última coluna.
Pela condição Where, ele não deve trazer nada.
"A vida é um paraíso, mas os homens não o sabem e não se preocupam em sabê-lo." Fiodor Dostoievski
- Marcado como Resposta Giovani Cr terça-feira, 17 de dezembro de 2013 13:21
-
Tente utilizar:
SELECT * FROM tblGTKLogradouros logr WHERE NOT EXISTS(SELECT 1 FROM tblGTKLocalizacao loc WHERE logr.PK_Id = loc.FK_tblWRILogradouros_Id)
- Sugerido como Resposta Junior Galvão - MVPMVP sexta-feira, 13 de dezembro de 2013 14:33
- Marcado como Resposta Giovani Cr terça-feira, 17 de dezembro de 2013 13:22
Todas as Respostas
-
Patricia, se eu entendi direito, você quer saber todos os registros da tabela logradouros que não estão sendo usados na tabela localização certo?
Ficaria mais ou menos assim:
SELECT LG.* FROM Logradouros LG LEFT JOIN Localização LC ON LC.FK_LOG = LG.PK_LOG WHERE LC.FK_LOG IS NULL
Não testei mas deve funcionar.
"A vida é um paraíso, mas os homens não o sabem e não se preocupam em sabê-lo." Fiodor Dostoievski
-
eu não tenho como igualar a NULL, porque é pk_ID da tabela de logradouros na tabela de localização FK
pelo que eu vi, mas não sei fazer teria que usar o comando not exist, ou seja todos os logradouros que tem na tabela de logradouros que não estão sendo usados na tabela de localização.
-
Patricia, tente fazer com o IS NULL
Dá uma olhada nesse artigo.
Nesse caso, o IS NULL é apenas por conta do JOIN, como ele não tem uma correspondência na outra tabela, ele retornaria "NULL" na consulta.
"A vida é um paraíso, mas os homens não o sabem e não se preocupam em sabê-lo." Fiodor Dostoievski
-
Entao é assim:
Na tabela logradouros vamos imaginar que eu tenho 3 ruas
1- Rua Joao
2- Rua Maria
3- Rua Italia
Das três Ruas, a Rua joao e maria foram usadas na tabela localização, e Rua Itália existe na tabela de logradouros, porem não foi usada na tabela localização, então com null ou isnull não daria certo , entende?
-
Sim, o cenário que eu imaginei foi exatamente esse.
Tabela Logradouro:
ID_LOG (PK)
Logradouro
Cep
Estado
Etc...Tabela Localização:
ID_LOC(PK)
ID_LOG(FK)
Etc...SELECT LG.* FROM Logradouros LG LEFT JOIN Localização LC ON LC.ID_LOG = LG.ID_LOG WHERE LC.ID_LOG IS NULL
Realize o teste e depois poste o resultado por favor.
"A vida é um paraíso, mas os homens não o sabem e não se preocupam em sabê-lo." Fiodor Dostoievski
-
-
Se a cláusula WHERE está com o IS NULL e montado corretamente não deveria trazer essa situação.
Se você puder, poste sua query final para vermos como ficou.
"A vida é um paraíso, mas os homens não o sabem e não se preocupam em sabê-lo." Fiodor Dostoievski
-
Segue o comando:
select tblwrilogradouros.PK_Id, tblwrilogradouros.Logradouro
from tblwrilogradouros
left join tblwrilocalizacao on tblwrilocalizacao.FK_tblWRILogradouros_Id =
tblwrilogradouros.PK_Idwhere tblwrilocalizacao.FK_tblWRILogradouros_Id is null
order by tblwrilogradouros.Logradouro asc
-
Ele está correto.
Certeza que ele está trazendo informações que constam na 2 tabelas?
Coloca na 1ª linha do select o seguinte:select tblwrilogradouros.PK_Id, tblwrilogradouros.Logradouro, tblwrilocalizacao.FK_tblWRILogradouros_Id
e verifique se ele está retornando algum valor nessa última coluna.
Pela condição Where, ele não deve trazer nada.
"A vida é um paraíso, mas os homens não o sabem e não se preocupam em sabê-lo." Fiodor Dostoievski
- Marcado como Resposta Giovani Cr terça-feira, 17 de dezembro de 2013 13:21
-
Tente utilizar:
SELECT * FROM tblGTKLogradouros logr WHERE NOT EXISTS(SELECT 1 FROM tblGTKLocalizacao loc WHERE logr.PK_Id = loc.FK_tblWRILogradouros_Id)
- Sugerido como Resposta Junior Galvão - MVPMVP sexta-feira, 13 de dezembro de 2013 14:33
- Marcado como Resposta Giovani Cr terça-feira, 17 de dezembro de 2013 13:22