none
Trazer os registros a mais entre duas tabelas que deveriam ser "iguais" RRS feed

  • Pergunta

  • Boa tarde, qual a melhor forma de comprar dados de duas tabelas que deveriam ser"iguais" mas trazer apenas as linhas dos registros a mais  Ex:

    Tabela A                   Tabela B                                                                                                 Retornaria:             maria  25

    Nome   idade            nome    idade                                                                         tiago  17

    roger    20                roger     20

                                     maria    25   

    joão     17                 joão      17

                                     tiago     17



    sexta-feira, 21 de junho de 2013 17:56

Respostas

Todas as Respostas

  • Roger,

    Faça um join com 2 chaves:

    SELECT a.Nome, a.Idade

    FROM TabelaA a

    INNER JOIN TabelaB b

    ON (a.Nome = b.Nome AND a.Idade = b.Idade)


    Fabrizzio A. Caputo
    MCT
    Certificações:
    Oracle OCA 11g
    MCITP SQL Server 2008 Implementation and Maintenance
    MCITP SQL Server 2008 Developer
    ITIL V3 Foundation
    Blog Pessoal: www.fabrizziocaputo.wordpress.com
    Email: fabrizzio.antoniaci@gmail.com

    sexta-feira, 21 de junho de 2013 17:59
    Moderador
  • Fabrizzio, não sei se expliquei certo, mas o que eu quero é comparar registro por registro da Tabela A com a Tabela B e retornar apenas os registros que não constem na tabela b. Neste exemplo abaixo retornaria apenas 1 registro: id-4 nome marcos

    Tabela A

    Tabela B

    Id    nome

    Id    nome

    1      roger

    1 roger

    2    angelo

    2   angelo

    3  pedro

    3   pedro

    4   marcos

    5  joão

    5  joão

    6  antonio

    6  antonio

    sexta-feira, 21 de junho de 2013 18:18
  • Boa tarde,

    Se podem existir linhas a mais somente na tabela B, experimente dessa forma:

    select b.Nome, b.Idade
    from TabelaB as b
    left join TabelaA as a
        on 
            a.Nome = b.Nome and
            a.Idade = b.Idade
    where a.Nome is null

    Se podem existir linhas nas duas tabelas, experimente dessa forma:

    select coalesce(b.Nome, a.Nome) as Nome, coalesce(b.Idade, a.Idade) as Idade
    from TabelaB as b
    full join TabelaA as a
        on 
            a.Nome = b.Nome and
            a.Idade = b.Idade
    where 
        a.Nome is null or
        b.Nome is null

    Espero que ajude.


    Assinatura: http://www.imoveisemexposicao.com.br

    sexta-feira, 21 de junho de 2013 18:20
  • Se a instância for 2008 você poderia utilizar o , except ou intersect. Dá uma olhada:http://msdn.microsoft.com/pt-br/library/ms188055.aspx

    select  * from tabelaA
    except
    select  * from tabelaB 

    • Marcado como Resposta Roger Ponsoni terça-feira, 25 de junho de 2013 16:23
    sexta-feira, 21 de junho de 2013 19:36
  • Deleted
    sábado, 22 de junho de 2013 14:08
  • Deleted
    domingo, 23 de junho de 2013 22:41