Insert com DUPLICIDADE

Dúvidas, dicas e truques de SQL, Select, Update, Delete, cláusulas, operações com joins, Funções em SQLs, etc
FelipeIssibachi
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 6
Registrado em: Qui, 22 Out 2009 10:06 am
Localização: São Paulo - SP
Felipe Issibachi - Consultor BI

O meu problema é o seguinte.

Preciso inserir em uma tabela de cadastro de produtos... os códigos e as descrições dos produtos. No caso a PK é o código

A fonte desses dados vem de uma outra tabela no banco. E nela possui os produtos de um mesmo código com descrições diferentes, por exemplo:

Selecionar tudo

COD                    DESCRICAO
01                     CANETA BIC
01                     CANETA BIC AZUL
01                     CANETA BIC AZUL 1.2
02                     CANETA BIC
02                     CANETA BIC VERMELHA 1.2
02                     CANETA BIC VERMELHA
Bom. O meu cliente quer que eu considere apenas a última descrição.
Que não é necessáriamente a de maior número de caracteres, por isso não dá pra fazer com o MAX.
Queria saber se alguém tem uma sugestão do que eu poderia fazer pra que esse insert não viole minha chave primária.
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5024
Registrado em: Seg, 03 Mai 2004 3:08 pm
Localização: Portland, OR USA
Contato:
Thomas F. G

Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered

Como você sabe qual é a última ?
Tem um campo DATA que informa isso ?
victorhugomuniz
Moderador
Moderador
Mensagens: 1396
Registrado em: Sex, 01 Fev 2008 2:06 pm
Localização: Rio de Janeiro - RJ
Contato:
:D

você poderia usar o rownum e subquery?

Selecionar tudo

distinct COD
max(rownum)
FelipeIssibachi
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 6
Registrado em: Qui, 22 Out 2009 10:06 am
Localização: São Paulo - SP
Felipe Issibachi - Consultor BI

Seria muito bom se tivesse.

Ele não manja nada de banco. Quer que eu simplesmente adivinhe qual é a última.

É o seguinte. Essa tabela será atualizada mensalmente.

Conforme for atualizando eu terei que ir atualizando a minha tabela também.

Eu já pedi pra ele definir um padrão.. Mas são mais de 100 000 produtos. Ele tem preguiça de fazer isso.
victorhugomuniz
Moderador
Moderador
Mensagens: 1396
Registrado em: Sex, 01 Fev 2008 2:06 pm
Localização: Rio de Janeiro - RJ
Contato:
:D

Selecionar tudo

select distinct cod
from (select cod from tabela order by rownum desc)
Mas ele tem te dizer o que é o ultimo pra ele.. como assim ultima descriçao??[/code]
FelipeIssibachi
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 6
Registrado em: Qui, 22 Out 2009 10:06 am
Localização: São Paulo - SP
Felipe Issibachi - Consultor BI

Max Rownum na cláusula WHERE?!
victorhugomuniz
Moderador
Moderador
Mensagens: 1396
Registrado em: Sex, 01 Fev 2008 2:06 pm
Localização: Rio de Janeiro - RJ
Contato:
:D

la não funciona ne...

teria q ser no select.. to tentando te dar ideias somente

:lol:
FelipeIssibachi
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 6
Registrado em: Qui, 22 Out 2009 10:06 am
Localização: São Paulo - SP
Felipe Issibachi - Consultor BI

Ele quer o seguinte.

Que eu monte tipo um cursor que irá fazer esse trabalho de atualização.

Que atualize na tabela2 todas as descrições que forem diferentes da tabela1.

TABELA2

Selecionar tudo

COD DESCRICAO 
01 - CANETA BIC AZUL 1.2 
02 - CANETA BIC VERMELHA 

TABELA1

Selecionar tudo

COD DESCRICAO 
01 - CANETA BIC 
01 - CANETA BIC AZUL 
01 - CANETA BIC VERDE 1.2 
02 - CANETA BIC 
02 - CANETA BIC VERMELHA 1.2 
02 - CANETA BIC PRETA
03 - LÁPIS
TABELA2 ATUALIZADA

Selecionar tudo

COD DESCRICAO 
01 - CANETA BIC VERDE 1.2 
02 - CANETA BIC PRETA
03 - LÁPIS
victorhugomuniz
Moderador
Moderador
Mensagens: 1396
Registrado em: Sex, 01 Fev 2008 2:06 pm
Localização: Rio de Janeiro - RJ
Contato:
:D

Selecionar tudo

select distinct cod, descricao
from (select cod, descricao from tabela order by rownum desc)
pelos testes que fiz aqui isso funciona.. e claro q não order by rownum desc não te da certeza de pegar o ultimo ultimo.. mas você/cliente tambem não sabe nem o que e o ultimo ultimo.. rsrsrs
FelipeIssibachi
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 6
Registrado em: Qui, 22 Out 2009 10:06 am
Localização: São Paulo - SP
Felipe Issibachi - Consultor BI

Eu insiro o que não tem na outra pelo NOT EXISTS.
E atualizo as outras descrições 1 a 1.

É fácil simular... o dificil é por em prática o que ele manda eu fazer. rs

Tipo.

a tabela 1 está assim:

Selecionar tudo

COD DESCRICAO 
01 - CANETA BIC 
01 - CANETA BIC AZUL 
01 - CANETA BIC VERDE 1.2 
02 - CANETA BIC 
02 - CANETA BIC VERMELHA 1.2 
02 - CANETA BIC PRETA
03 - LÁPIS

e a tabela2 está assim:

Selecionar tudo

COD DESCRICAO 
01 - CANETA BIC AZUL 1.2 
02 - CANETA BIC VERMELHA 

ele irá comparar 1 a 1.

Selecionar tudo

'01 - CANETA BIC AZUL 1.2' <> '01 - CANETA BIC' 
então TABELA2 ficará assim:

Selecionar tudo

COD DESCRICAO 
01 - CANETA BIC
02 - CANETA BIC VERMELHA
FelipeIssibachi
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 6
Registrado em: Qui, 22 Out 2009 10:06 am
Localização: São Paulo - SP
Felipe Issibachi - Consultor BI

Ok. isso me faria ordenar da descrição de maior rownum que seria a ideal, até para a menos ideal.

Mas são varios códigos. Usando o exemplo mesmo da caneta.
Não tem como saber qual q é o certo. Tipo:

Selecionar tudo

ROWNUM  COD  DESCRICAO 
1  - 01 - CANETA BIC 
2  - 01 - CANETA BIC AZUL 
3  - 01 - CANETA BIC VERDE 1.2 
4  - 02 - CANETA BIC 
5  - 02 - CANETA BIC VERMELHA 1.2 
6  - 02 - CANETA BIC PRETA 
7  - 03 - LÁPIS
ACHO QUE TEM UM COMANDO... QUE NO CASO ME ESQUECI QUE FAZ OUTRO TIPO DE ORDENAÇÃO. você SABE?!

Selecionar tudo

COMANDO  COD  DESCRICAO 
1  - 01 - CANETA BIC 
2  - 01 - CANETA BIC AZUL 
3  - 01 - CANETA BIC VERDE 1.2 
1  - 02 - CANETA BIC 
2  - 02 - CANETA BIC VERMELHA 1.2 
3  - 02 - CANETA BIC PRETA 
1  - 03 - LÁPIS
SergioLBJr
Rank: Oracle Guru
Rank: Oracle Guru
Mensagens: 448
Registrado em: Ter, 16 Jun 2009 3:07 pm
Localização: Parobé - RS
Sérgio Luiz Bonemberger Junior
Programador Junior
Parobé RS

[]s

Cara acho que só tu pedindo pro teu cliente qual a ultima descrição que ele quer.
Não há como garantir, e mesmo que você consiga buscar a ultima descrição cadastrada corre o risco do cliente reclamar por que havia X casos que a ultima cadastrada era a certa.
victorhugomuniz
Moderador
Moderador
Mensagens: 1396
Registrado em: Sex, 01 Fev 2008 2:06 pm
Localização: Rio de Janeiro - RJ
Contato:
:D

eu concordo com o Sergio..
e como dizem ne.. dificil não e programar e sim saber o que programar
Responder
  • Informação