none
Verificar registros nao usados RRS feed

  • 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

    segunda-feira, 9 de dezembro de 2013 17:40

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
    terça-feira, 10 de dezembro de 2013 11:54
  • 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
    terça-feira, 10 de dezembro de 2013 12:06

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

    segunda-feira, 9 de dezembro de 2013 17:48
  • 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.

    segunda-feira, 9 de dezembro de 2013 17:52
  • 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

    segunda-feira, 9 de dezembro de 2013 18:00
  • 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?

    segunda-feira, 9 de dezembro de 2013 18:10
  • 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

    segunda-feira, 9 de dezembro de 2013 18:18
  • O comando deu certo, porem a listagem de logradouros alguns existem na tabela de localização, acredito que deva ser algum erro de analise minha então.

    mas mesmo assim te agradeço

    segunda-feira, 9 de dezembro de 2013 19:21
  • 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

    segunda-feira, 9 de dezembro de 2013 19:49
  • Segue o comando:

    select tblwrilogradouros.PK_Id, tblwrilogradouros.Logradouro

    from tblwrilogradouros

    left join tblwrilocalizacao on tblwrilocalizacao.FK_tblWRILogradouros_Id = 
    tblwrilogradouros.PK_Id

    where tblwrilocalizacao.FK_tblWRILogradouros_Id is null

    order by tblwrilogradouros.Logradouro asc

    terça-feira, 10 de dezembro de 2013 11:11
  • 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
    terça-feira, 10 de dezembro de 2013 11:54
  • 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
    terça-feira, 10 de dezembro de 2013 12:06