none
Como verificar se um campo existe como ID na mesma tabela? RRS feed

  • Pergunta

  • Olá.

    Meu problema é o seguinte: tenho uma tabela como esta abaixo (só exemplo):

    TABELA SEQUENCIA1

    ID  | NOME | REF

    1 | Item 1 | 0

    2 | Item 2 | 0

    4 | Item 4 | 2

    5 | Item 5 | 1

    6 | Item 6 | 3

     

    O campo REF é uma referência ao ID de um item da própria tabela. Pensando nisso, como faço uma query para trazer somente os itens da tabela cujo REF não existe como um ID da própria tabela? (no exemplo acima seria o Item 6, já que o REF dele é o ID 3, que não existe na tabela)

    A situação é a seguinte: na tabela são armazenados itens "Pai" e itens "Filho". Esse REF é para saber qual é o "Pai" dos itens "Filho". Quando o REF de um item é igual a Zero é porque ele é "Pai". Então no exemplo acima os itens 1 e 2 são "Pai" e seus filhos são os tens 5 e 4 respectivamente. Porém no caso do Item 6 o "Pai" referente a ele foi removido e ele ficou "órfão". Preciso que a query traga exatamente estes itemns "órfãos".

    Não sei se ficou confuso. Qualquer dúvida é só avisar.

    Obrigado!


    Ramon Gonzalez Inla

    • Editado R. Gonza terça-feira, 17 de janeiro de 2012 14:40
    terça-feira, 17 de janeiro de 2012 14:38

Respostas

  • Apenas uma das formas de se fazer:

    create table #teste
    (
        id int,
        nome varchar(50),
        ref int
    )

    insert into #teste (id, nome, ref) values (1, 'ITEM 1', 0)
    insert into #teste (id, nome, ref) values (2, 'ITEM 2', 0)
    insert into #teste (id, nome, ref) values (4, 'ITEM 4', 2)
    insert into #teste (id, nome, ref) values (5, 'ITEM 5', 1)
    insert into #teste (id, nome, ref) values (6, 'ITEM 6', 3)


    SELECT    *
    FROM    #teste A
            LEFT JOIN #teste B
            ON A.ref = B.id
    WHERE    B.id is null


    Abraços, Weslley Moura MCP - MCTS - ORA SqlExpert
    • Sugerido como Resposta Rodrigo Ataíde terça-feira, 17 de janeiro de 2012 20:20
    • Marcado como Resposta R. Gonza quarta-feira, 18 de janeiro de 2012 18:11
    terça-feira, 17 de janeiro de 2012 15:32

Todas as Respostas

  • Apenas uma das formas de se fazer:

    create table #teste
    (
        id int,
        nome varchar(50),
        ref int
    )

    insert into #teste (id, nome, ref) values (1, 'ITEM 1', 0)
    insert into #teste (id, nome, ref) values (2, 'ITEM 2', 0)
    insert into #teste (id, nome, ref) values (4, 'ITEM 4', 2)
    insert into #teste (id, nome, ref) values (5, 'ITEM 5', 1)
    insert into #teste (id, nome, ref) values (6, 'ITEM 6', 3)


    SELECT    *
    FROM    #teste A
            LEFT JOIN #teste B
            ON A.ref = B.id
    WHERE    B.id is null


    Abraços, Weslley Moura MCP - MCTS - ORA SqlExpert
    • Sugerido como Resposta Rodrigo Ataíde terça-feira, 17 de janeiro de 2012 20:20
    • Marcado como Resposta R. Gonza quarta-feira, 18 de janeiro de 2012 18:11
    terça-feira, 17 de janeiro de 2012 15:32
  • Puxa, isso nem passou pela minha cabeça! Já tava imaginando que era algo complicado.

    Muito obrigado Weslley! Funcionou 100%!

    :]


    Ramon Gonzalez Inla
    quarta-feira, 18 de janeiro de 2012 18:11