update no campo com valor de outra tabela
Boa tarde!
Seguinte preciso setar o campo do valor do produto com custo dele. O preço do produto fica em uma tabela(pctabpr) e o custo esta em outra tabela(pcest). Eu fiz com um codigo de produto o seguinte sql:
update pctabpr set pctabpr.ptabela =(select pcest.custoultent from pcest where codprod=527 and codfilial =5)
where pctabpr.codprod =527 and numregiao =3
Com um produto apenas funciona, mas preciso fazer isso com todos os itens do B.D.
Desde já agradeço o help.
Seguinte preciso setar o campo do valor do produto com custo dele. O preço do produto fica em uma tabela(pctabpr) e o custo esta em outra tabela(pcest). Eu fiz com um codigo de produto o seguinte sql:
update pctabpr set pctabpr.ptabela =(select pcest.custoultent from pcest where codprod=527 and codfilial =5)
where pctabpr.codprod =527 and numregiao =3
Com um produto apenas funciona, mas preciso fazer isso com todos os itens do B.D.
Desde já agradeço o help.
Marcos Souza
Curtidas 0
Respostas
Wilson Junior
01/12/2010
As tabelas pctabpr e pcest tem somente o CodProd em comum? Os campos que não estão em comum (CodFilial e NumRegiao) tem os filtros fixos, conforme o exemplo?
Aguardo retorno.
Aguardo retorno.
GOSTEI 0
Marcos Souza
01/12/2010
As duas somente o codprod em comum. Na pcest o codfilial possui 9 filiais no qual quero pegar o preço de custo somente da filial 5. Na pctabpr tenho 3 numregiao no qual quero setar somente os preços do numregiao 3.
Vlw's
Vlw's
GOSTEI 0
Wilson Junior
01/12/2010
Veja se lhe ajuda:
Espero ter colaborado.
UPDATE pctabpr SET pctabpr.ptabela =(SELECT pcest.custoultent FROM pcest WHERE pcest.codprod = pctabpr.codprod AND pcest.codfilial = 5) where pctabpr.numregiao = 3
Espero ter colaborado.
GOSTEI 0
Marcos Souza
01/12/2010
Muito obrigado, funcionou perfeitamente. Eu estava esquecendo de um parametro. Ja implementei ele e ja esta em uso.
Vlw mesmo
Vlw mesmo
GOSTEI 0
Wilson Junior
01/12/2010
Precisando é só postar.
Não esqueça de finalizar o tópico.
Não esqueça de finalizar o tópico.
GOSTEI 0
Marcus Honorio
01/12/2010
Prezados boa noite, gostaria se alguém pode me auxiliar.
Estou tentando fazer o update de um campo de uma tabela, a partir de dados de uma outra. E estou utilizando a seguinte query
UPDATE CADMAT
SET CADMAT.DESCRICAO =(SELECT CADMAT5$.DESCRICAO FROM CADMAT5$ WHERE CADMAT5$.REFERENCIA = cadmat.referencia AND cadmat5$.GRUPO = cadmat.grupo)
Porém ao rodar a query, obtenho a mensagem do SQL:
Mensagem 512, Nível 16, Estado 1, Linha 1
A subconsulta retornou mais de 1 valor. Isso não é permitido quando a subconsulta segue um =, !=, = ou quando ela é usada como uma expressão.
A instrução foi finalizada.
Os campos GRUPO e REFERENCIA são os campos chaves que distinguem meus registros nas 2 tabelas
Grato desde já pela ajuda.
Abraços
Estou tentando fazer o update de um campo de uma tabela, a partir de dados de uma outra. E estou utilizando a seguinte query
UPDATE CADMAT
SET CADMAT.DESCRICAO =(SELECT CADMAT5$.DESCRICAO FROM CADMAT5$ WHERE CADMAT5$.REFERENCIA = cadmat.referencia AND cadmat5$.GRUPO = cadmat.grupo)
Porém ao rodar a query, obtenho a mensagem do SQL:
Mensagem 512, Nível 16, Estado 1, Linha 1
A subconsulta retornou mais de 1 valor. Isso não é permitido quando a subconsulta segue um =, !=, = ou quando ela é usada como uma expressão.
A instrução foi finalizada.
Os campos GRUPO e REFERENCIA são os campos chaves que distinguem meus registros nas 2 tabelas
Grato desde já pela ajuda.
Abraços
GOSTEI 0
Marcos Souza
01/12/2010
Olá, ele esta lhe informando que esta retornando mais de um resultado, por ex:
cadmat.grupo - voce esta tentando setar o grupo cadmat, porem ele nao consegue distinguir qual cadmat se existe mais de um. Se tiver 1,2,3,4 ele nao consegue separar.
O mesmo serve para referencia. Um dos dois ou os dois estao retornando valores identicos, sendo que ele consegue setar apenas um. Da um select na tabela para ver se existe essas informações duplicadas, pois tive o mesmo problema que voce em um update e tive que retirar os valores duplicados para setar.
Abç
cadmat.grupo - voce esta tentando setar o grupo cadmat, porem ele nao consegue distinguir qual cadmat se existe mais de um. Se tiver 1,2,3,4 ele nao consegue separar.
O mesmo serve para referencia. Um dos dois ou os dois estao retornando valores identicos, sendo que ele consegue setar apenas um. Da um select na tabela para ver se existe essas informações duplicadas, pois tive o mesmo problema que voce em um update e tive que retirar os valores duplicados para setar.
Abç
GOSTEI 0
Marcus Honorio
01/12/2010
Bom deixa ver se eu entendi. Eu tenho referencias identicas e o que distinguem uma das outras é o grupo, exemplo:
GRUPO REFERENCIA
01 001235
02 001235
01 000347
04 000347
03 000213
VL 000213
Por isso a minha condição em dizer que where cadmat.grupo = cadmat5$.grupo AND cadmat.referencia = cadmat5$.referencia
Voce está me dizendo que em uma das 2 tabelas há uma duplicidade do tipo:
GRUPO REFERENCIA
01 001235
01 001235
??????????
Abraços e obrigado
GRUPO REFERENCIA
01 001235
02 001235
01 000347
04 000347
03 000213
VL 000213
Por isso a minha condição em dizer que where cadmat.grupo = cadmat5$.grupo AND cadmat.referencia = cadmat5$.referencia
Voce está me dizendo que em uma das 2 tabelas há uma duplicidade do tipo:
GRUPO REFERENCIA
01 001235
01 001235
??????????
Abraços e obrigado
GOSTEI 0
Marcos Souza
01/12/2010
Exatamente, ele nao esta conseguindo distinguir o que setar na sua tabela, pois existe esses codigos repetidos, pois esta retornando dois ou mais resultados.
GOSTEI 0
Fabiano Carvalho
01/12/2010
Tente algo do tipo
UPDATE CADMAT
SET CADMAT.DESCRICAO =(SELECT DISTINCT CADMAT5$.DESCRICAO FROM CADMAT5$ WHERE CADMAT5$.REFERENCIA = cadmat.referencia AND cadmat5$.GRUPO = cadmat.grupo)
Ou ainda
UPDATE CADMAT
SET CADMAT.DESCRICAO =(SELECT TOP 1 CADMAT5$.DESCRICAO FROM CADMAT5$ WHERE CADMAT5$.REFERENCIA = cadmat.referencia AND cadmat5$.GRUPO = cadmat.grupo)
UPDATE CADMAT
SET CADMAT.DESCRICAO =(SELECT DISTINCT CADMAT5$.DESCRICAO FROM CADMAT5$ WHERE CADMAT5$.REFERENCIA = cadmat.referencia AND cadmat5$.GRUPO = cadmat.grupo)
Ou ainda
UPDATE CADMAT
SET CADMAT.DESCRICAO =(SELECT TOP 1 CADMAT5$.DESCRICAO FROM CADMAT5$ WHERE CADMAT5$.REFERENCIA = cadmat.referencia AND cadmat5$.GRUPO = cadmat.grupo)
GOSTEI 0
Fabiano Carvalho
01/12/2010
Tente algo do tipo
UPDATE CADMAT
SET CADMAT.DESCRICAO =(SELECT DISTINCT CADMAT5$.DESCRICAO FROM CADMAT5$ WHERE CADMAT5$.REFERENCIA = cadmat.referencia AND cadmat5$.GRUPO = cadmat.grupo)
Ou ainda
UPDATE CADMAT
SET CADMAT.DESCRICAO =(SELECT TOP 1 CADMAT5$.DESCRICAO FROM CADMAT5$ WHERE CADMAT5$.REFERENCIA = cadmat.referencia AND cadmat5$.GRUPO = cadmat.grupo)
UPDATE CADMAT
SET CADMAT.DESCRICAO =(SELECT DISTINCT CADMAT5$.DESCRICAO FROM CADMAT5$ WHERE CADMAT5$.REFERENCIA = cadmat.referencia AND cadmat5$.GRUPO = cadmat.grupo)
Ou ainda
UPDATE CADMAT
SET CADMAT.DESCRICAO =(SELECT TOP 1 CADMAT5$.DESCRICAO FROM CADMAT5$ WHERE CADMAT5$.REFERENCIA = cadmat.referencia AND cadmat5$.GRUPO = cadmat.grupo)
Vale lembrar que a melhor alternativa é utilizar JOIN
GOSTEI 0
Marcus Honorio
01/12/2010
Prezados, muito obrigado pela ajuda.
Eu rodei a query
SELECT DISTINCT grupo, referencia
FROM CADMAT
GROUP BY REFERENCIA, GRUPO
HAVING count(REFERENCIA) > 1
E vi que existiam 2 registros identicos.
Depois apliquei o update sugerido por voces.
Obrigado a todos pela ajuda.
Abraços
Eu rodei a query
SELECT DISTINCT grupo, referencia
FROM CADMAT
GROUP BY REFERENCIA, GRUPO
HAVING count(REFERENCIA) > 1
E vi que existiam 2 registros identicos.
Depois apliquei o update sugerido por voces.
Obrigado a todos pela ajuda.
Abraços
GOSTEI 0