Comparar dados da mesma tabela.

Dúvidas, dicas e truques de SQL, Select, Update, Delete, cláusulas, operações com joins, Funções em SQLs, etc
nollries
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 4
Registrado em: Ter, 30 Mar 2010 12:01 am
Localização: PR
Alysson

Olá amigos,

sou novo aqui no fórum e também no SQL...

bom, preciso fazer a seguinte comparação. Tenho uma tabela de produtos e preciso comparar se o produto A tem as mesmas informações preenchidas assim como no produto B e quais são elas, algo parecido.

Agradeço desde já

valeu!
JLM
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 11
Registrado em: Ter, 23 Mar 2010 5:15 pm
Localização: Araraquara-SP

a principio podemos considerar a seguinte pesquisa :

Selecionar tudo

 SELECT * FROM PRODUTO T1, PRODUTO T2
            WHERE T1.CODPRO <> T2.CODPRO
                AND (T1.COLUNA1 = T2.COLUNA1   OR
                         T1.COLUNA2 = T2.COLUNA2   OR
                         T1.COLUNA3 = T2.COLUNA3   OR
                         ..... )
:wink:
nollries
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 4
Registrado em: Ter, 30 Mar 2010 12:01 am
Localização: PR
Alysson

Fala JML beleza?

primeiramente obrigado pela atenção!

... vou tentar aplicar esta solução que v. indicou e retorno com os resultados...

valeu!

:arrow:
Avatar do usuário
fsitja
Rank: OraSauro
Rank: OraSauro
Mensagens: 611
Registrado em: Seg, 19 Jan 2009 4:29 pm
Localização: Gaúcho no Rio de Janeiro - RJ
"The scars exist to remind us that the past was real"
Campanha: Como fazer uma pergunta e obter uma resposta.
http://tkyte.blogspot.com/2005/06/how-t ... tions.html

OCA & OCP Developer — OCE SQL Expert — OCS Data Warehousing Specialist

A definição do que você precisa está meio vaga... de repente com algo mais pontual dê para sugerir algo mais específico para sua necessidade.
nollries
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 4
Registrado em: Ter, 30 Mar 2010 12:01 am
Localização: PR
Alysson

Bom dia fsitja,

realmente,

bom então é o seguinte.

tenho uma tabela de produtos (medicamentos) onde o medicamento comercial tem informado em seu cadastro o seu correspondente genérico que também é cadastrado na mesma tabela e tem seu correspondente comercial informado. Partindo disso, em algumas situações chamo o medicamento comercial porém utilizo o seu genérico, e vice versa, para fins de movimentação de estoque, cobrança etc. Em alguns casos os dois cadastros devem ser exatamente iguais outrora não, dai preciso comparar os medicamentos (comercial X genérico) afim de identificar diferenças nos cadastros e de preferência quais campos estão informados em um e no outro não e/ou que informação tem no campo A do comercial e o que tem no campo A do genérico.

... Agradeço a informação do amigo JML, porém ainda não consegui adaptar ao que preciso.

Bom, acredito que com estas informações acima seja possível entender melhor a situação.

Agradeço a força!!!
Avatar do usuário
fsitja
Rank: OraSauro
Rank: OraSauro
Mensagens: 611
Registrado em: Seg, 19 Jan 2009 4:29 pm
Localização: Gaúcho no Rio de Janeiro - RJ
"The scars exist to remind us that the past was real"
Campanha: Como fazer uma pergunta e obter uma resposta.
http://tkyte.blogspot.com/2005/06/how-t ... tions.html

OCA & OCP Developer — OCE SQL Expert — OCS Data Warehousing Specialist

nollries, fiz dois exemplos de select com formas diferentes de exibir relatório desse tipo:

Selecionar tudo

SQL> create table produto (cod_produto       number(10) primary key,
  2                        nome_produto      varchar2(100) not null,
  3                        preço             number(15, 2),
  4                        tipo_receita      varchar2(30) check (tipo_receita in ('A',
  5                                                                               'B',
  6                                                                               'ESPECIAL',
  7                                                                               'TALIDOMIDA',
  8                                                                               'CONTROLE ESPECIAL')),
  9                        cod_med_comercial number(10) references produto (cod_produto));
 
Table created
SQL> begin
  2  insert into produto values (1, 'PROD_X', 20.99, 'ESPECIAL', null);
  3  insert into produto values (2, 'PROD_X1', 15.99, 'ESPECIAL', 1);
  4  insert into produto values (3, 'PROD_X2', 13.99, 'A', 1);
  5  insert into produto values (4, 'PROD_N', 9.99, null, null);
  6  insert into produto values (5, 'PROD_N1', 7.99, null, 4);
  7  commit;
  8  end;
  9  /
 
PL/SQL procedure successfully completed
SQL> SELECT p.cod_produto  cod_comercial,
  2         g.cod_produto  cod_generico,
  3         p.nome_produto nome_comercial,
  4         g.nome_produto nome_generico,
  5         p.preço        preço_comercial,
  6         g.preço        preço_generico,
  7         p.tipo_receita receita_comercial,
  8         g.tipo_receita receita_generico
  9    FROM produto p
 10    JOIN produto g
 11      ON g.cod_med_comercial = p.cod_produto
 12   WHERE p.tipo_receita != g.tipo_receita
 13         OR p.preço < g.preço;
 
COD_COMERCIAL COD_GENERICO NOME_COMERCIAL NOME_GENERICO   preço_COMERCIAL    preço_GENERICO RECEITA_COMERCIAL RECEITA_GENERICO
------------- ------------ -------------- ------------- ----------------- ----------------- ----------------- ----------------
            1            3 PROD_X         PROD_X2                   20,99             13,99 ESPECIAL          A
SQL> SELECT p.cod_produto,
  2         p.nome_produto,
  3         PRIOR p.nome_produto nome_com,
  4         p.preço,
  5         PRIOR p.preço preço_com,
  6         p.tipo_receita,
  7         PRIOR p.tipo_receita rec_com
  8    FROM produto p
  9  START WITH p.cod_med_comercial IS NULL
 10  CONNECT BY PRIOR p.cod_produto = p.cod_med_comercial;
 
COD_PRODUTO NOME_PRODUTO NOME_COM             preço  preço_COM TIPO_RECEITA REC_COM
----------- ------------ -------- ----------------- ---------- ------------ ---------
          1 PROD_X                            20,99            ESPECIAL     
          2 PROD_X1      PROD_X               15,99      20,99 ESPECIAL     ESPECIAL
          3 PROD_X2      PROD_X               13,99      20,99 A            ESPECIAL
          4 PROD_N                             9,99                         
          5 PROD_N1      PROD_N                7,99       9,99              
 
SQL> 
Não dê bola para minha tabela de exemplo... é boba mesmo, só para testes.

O primeiro select faz um self-join para listar todos os medicamentos genéricos ao lado de seu equivalente comercial. Aí coloquei um filtro no where para selecionar os que tivessem diferença do atributo de tipo de receita e cujo preço do remédio genérico fosse mais caro do que o comercial (!) :lol:

O segundo faz um connect by (select hierárquico) para pegar todos remédios e abaixo deles listar seus genéricos, comparando os atributos. Dá para encapsular esse select numa subquery (ou view) para filtrar discrepâncias e outras coisas.

É um começo, se tiver sugestões ou correções para apontar, fique à vontade.
nollries
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 4
Registrado em: Ter, 30 Mar 2010 12:01 am
Localização: PR
Alysson

Bom dia pessoal,

valeu fsitja pelo código, vou dar uma olhada e ver o que eu consigo. Provavelmente só consiga responder no final de semana - os últimos dias estão punk :-o na facul e no trabalho ... - mais pelo que analisei com certeza vai ajudar muito.

retorno assim que possível, valeu!!!

Até mais.
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 6 visitantes