SQL - actualização de campos internos de tabela


Domínios e alojamento
Clube 24 - Amizades
Computadores Portáteis

Voltar   Descobre > Informática > Programação
Procurar Novas Mensagens Marcar Fóruns como Lidos

 
 
Opções Procurar Display
  #1  
Antigo 06-2005, 14:25
pure_hate pure_hate está offline
Membro
 
Registo: Nov 2004
Mensagens: 60
Default SQL - actualização de campos internos de tabela

é possivel realizar a seguinte acção em SQL:
tenho uma tabela de preços de venda a publico onde existe um "código de artigo", uma "linha de Preços" e um "preço"
o preenchimento dos campos é como se pode ver a seguir:
artigo a ------- 1 ------ 3.00
artigo a ------- 2 ------ 0.00
artigo b ------- 1 ------ 10.00
artigo b ------- 2 ------ 0.00

é possivel fazer um update do preço baseado no seguinte critério:
onde "linha de preço" = 2 para cada artigo copiar o preço da linha de preço 1
????


obrigado desde já
__________________
http://www.purehate.tk - Is all we see or seem but a dream within a dream? (E.A.Poe)
Responder com Quote
Publicidade
publicidade
  #2  
Antigo 06-2005, 15:35
LiG LiG está offline
Super Moderador
 
Registo: Jan 2004
Mensagens: 335
Default hmm..

Se percebi bem o que disseste seria algo assim:

UPDATE tabela AS a
SET preco=(SELECT preco FROM tabela AS b WHERE linha_precos=1 AND a.id_artigo=b.id_artigo)
WHERE linha_preco=2;

Esta consulta passa no Mimer SQL-99 Validator com a seguinte mensagem:
Quote:
Conforms to Core SQL-99
Portanto se o SGBD suportar SQL-99 em principio funcionará.

No entanto, testei isto no Access XP e numa versão (não a mais recente) do MySQL e ambos se recusaram a executar, talvez tenhas mais sorte.

Se isto não funcionar palpita-me que tens que utilizar uma linguagem de programação para fazer isso, quer através de um procedimento na própria linguagem do SGBD quer através de um script.
Responder com Quote
  #3  
Antigo 06-2005, 22:16
pure_hate pure_hate está offline
Membro
 
Registo: Nov 2004
Mensagens: 60
Default

obrigado pela pronta resposta, assim que testar digo-te se resolveu
__________________
http://www.purehate.tk - Is all we see or seem but a dream within a dream? (E.A.Poe)
Responder com Quote
  #4  
Antigo 06-2005, 14:21
LiG LiG está offline
Super Moderador
 
Registo: Jan 2004
Mensagens: 335
Default Re: hmm..

Quote:
Mensagem Original de Paulo Oliveira
O teste para este query em PHP funciona...
De que teste falas?
Responder com Quote
  #5  
Antigo 06-2005, 20:41
LiG LiG está offline
Super Moderador
 
Registo: Jan 2004
Mensagens: 335
Default Re: hmm..

Quote:
Mensagem Original de Paulo Oliveira
Fiz um teste com as tabelas que ele refere e com o query. Funciona... referi-o para não deixar dúvidas.
Ok, é que a parte em que dizes ".. em PHP.." pôs-me a pensar se o php não teria algum mecanismo de testes para SQL.

Já agora que SGBD utilizaste?
Responder com Quote
  #6  
Antigo 06-2005, 14:52
LiG LiG está offline
Super Moderador
 
Registo: Jan 2004
Mensagens: 335
Default Re: hmm..

Quote:
Mensagem Original de Paulo Oliveira
No entanto, também é possível o seguinte:
Código:
UPDATE tabela
SET preco=(SELECT preco
           FROM tabela
           WHERE linha_preco=1)
WHERE linha_preco=2;
... ou seja, removendo os AS porque a tabela é sempre a mesma.
Qual foi a tua intenção inicial, aliás?
O sub-select vai devolver mais que um valor assim, por isso não o podes igualar directamente. Existem muitos produtos com a linha_preco=1, mas pretende-se aquele cujo preco_linha=1 e o produto seja o mesmo do que tem preco_linha=2.
Por isso precisas do AS a e AS b para poder relacionar as duas tabelas, (que por acaso são a mesma) através do ID_artigo e do AND que também removeste devolvendo assim um valor único.

Também fiz dessa forma inicialmente, mas depois reli o que tinha sido escrito e olhei para a tabela e apercebi-me que existem muitos produtos com linha_preco=1 e com linha_preco=2.

A segunda solução que apresentas, com PHP, já funciona porque vais utilizar o ID do artigo para relacionar as duas consultas.
Responder com Quote
  #7  
Antigo 06-2005, 22:56
pure_hate pure_hate está offline
Membro
 
Registo: Nov 2004
Mensagens: 60
Default

exactamente, sem o as a e as b não funcionava, até aí eu tinha chegado


problema resolvido

obrigado pela colaboração
__________________
http://www.purehate.tk - Is all we see or seem but a dream within a dream? (E.A.Poe)
Responder com Quote
Responder

« Anterior | Seguinte »

Opções Procurar
Procurar:

Pesquisa Avançada
Display

Regras
Você não pode criar novos tópicos
Você não pode responder a msgs
Você não pode colocar anexos
Você não pode editar as suas msgs

Código vB está On
Smilies estão On
Código HTML está Off
Escolher Fórum


São agora 00:29.


Descobre.com - A Comunidade em Português
Powered by vBulletin, Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

Portateis .com : computadores portáteis - Logos, games and ringtones - Publicidade
Parte integrante do Portal Descobre.com - Online desde 2000