none
Select(Duvida) RRS feed

  • Pergunta

  • Pessoal,

    Estou com uma duvida quanto a um select que estou fzd!!! Tenho duas tabelas TB1 e TB2, tenho que pegar tds os clientes da TB1 que não estejam na TB2. Eu fiz isso da seguinte maneira:

    ....where cd_cliente not in (select cd_cliente from TB)

    Gostaria de saber se existe alguma outra forma para realizar essa triagem? Tipo com algum tipo de join dá pra fazer?

    Se alguem puder ajudar fico agradecido!!!

    vlw!!!

    segunda-feira, 21 de fevereiro de 2011 18:32

Respostas

  • WG segue outras maneiras

    declare @tb1 table (id int, nome varchar(6))
    declare @tb2 table (id int, nome varchar(6))
    insert into @tb1 values (1,'YODA')
    insert into @tb1 values (2,'C3PO')
    insert into @tb1 values (3,'R2D2')
    insert into @tb1 values (4,'VADER')
    insert into @tb2 values (1,'YODA')
    insert into @tb2 values (2,'C3PO')
    insert into @tb2 values (3,'R2D2')
    --not in
    select * from @tb1 where id not in (select id from @tb2)
    -- left joi
    select a.* from @tb1 a left join @tb2 b on a.id=b.id where b.id is null
    -- except
    select * from @tb1 except select * from @tb2

    Att. Marcelo Fernandes


    MCP, MCDBA, MCSA, MCTS.
    Se útil, classifique!!!
    Me siga no twitter: @marcelodba

    • Sugerido como Resposta Gustavo Maia Aguiar segunda-feira, 21 de fevereiro de 2011 20:26
    • Marcado como Resposta Eder Costa sexta-feira, 25 de fevereiro de 2011 19:06
    segunda-feira, 21 de fevereiro de 2011 18:45
    Moderador

Todas as Respostas

  • WG segue outras maneiras

    declare @tb1 table (id int, nome varchar(6))
    declare @tb2 table (id int, nome varchar(6))
    insert into @tb1 values (1,'YODA')
    insert into @tb1 values (2,'C3PO')
    insert into @tb1 values (3,'R2D2')
    insert into @tb1 values (4,'VADER')
    insert into @tb2 values (1,'YODA')
    insert into @tb2 values (2,'C3PO')
    insert into @tb2 values (3,'R2D2')
    --not in
    select * from @tb1 where id not in (select id from @tb2)
    -- left joi
    select a.* from @tb1 a left join @tb2 b on a.id=b.id where b.id is null
    -- except
    select * from @tb1 except select * from @tb2

    Att. Marcelo Fernandes


    MCP, MCDBA, MCSA, MCTS.
    Se útil, classifique!!!
    Me siga no twitter: @marcelodba

    • Sugerido como Resposta Gustavo Maia Aguiar segunda-feira, 21 de fevereiro de 2011 20:26
    • Marcado como Resposta Eder Costa sexta-feira, 25 de fevereiro de 2011 19:06
    segunda-feira, 21 de fevereiro de 2011 18:45
    Moderador
  • Boa Tarde,

    O NOT IN na maioria das vezes costuma ser a opção menos performática possível. Além dos problemas de desempenho, usualmente ela dá margem a retornar dados "errados" e não recomendo utilizá-la para comparar tabelas. Segue um artigo com outras alternativas e os devidos esclarescimentos:

    Piores práticas – Utilização do operador NOT IN
    http://gustavomaiaaguiar.wordpress.com/2009/01/18/piores-praticas-utilizacao-do-operador-not-in/

    [ ]s,

    Gustavo Maia Aguiar
    http://gustavomaiaaguiar.wordpress.com 


    Classifique as respostas. O seu feedback é imprescindível
    segunda-feira, 21 de fevereiro de 2011 20:26