Update entre duas tabelas sem sucesso.

Delphi

17/09/2013

Bom dia,

Estou tentando fazer um Update entre duas tabelas do mesmo banco de dados (firebird).
Estou usando esse comando:

UPDATE PRODUTONOVO A SET A.descricao = (SELECT B.descricao FROM PRODUTO B WHERE B.codprod = A.codprod  )


Porém eu executo a instrução sem erro e fica até um tempo executando mais quando vou nas minhas tabelas não aconteceu nada.

Esse comando eu executo pelo sistema e pelo IBEXPERT.

Alguém tem idéia?
Osiel Gomes

Osiel Gomes

Curtidas 0

Respostas

Fabiano Carvalho

Fabiano Carvalho

17/09/2013

UPDATE A SET A.descricao = B.descricao 
FROM PRODUTONOVO  as A
INNER JOIN PRODUTO B 
ON B.codprod = A.codprod
GOSTEI 0
Osiel Gomes

Osiel Gomes

17/09/2013

UPDATE A SET A.descricao = B.descricao 
FROM PRODUTONOVO  as A
INNER JOIN PRODUTO B 
ON B.codprod = A.codprod


Dá erro no FROM.
GOSTEI 0
Rafael Brendolan

Rafael Brendolan

17/09/2013

UPDATE A SET A.descricao = B.descricao 
FROM PRODUTONOVO  A
INNER JOIN PRODUTO B 
ON B.codprod = A.codprod
GOSTEI 0
Osiel Gomes

Osiel Gomes

17/09/2013

UPDATE A SET A.descricao = B.descricao 
FROM PRODUTONOVO  A
INNER JOIN PRODUTO B 
ON B.codprod = A.codprod



Não entendi o que mudou no comando mais de qualquer forma eu testei e o erro é o mesmo.

Valeu
GOSTEI 0
Fabiano Carvalho

Fabiano Carvalho

17/09/2013

Como assim?
Voce executa ele onde? Na aplicação ou direto no banco?
GOSTEI 0
Osiel Gomes

Osiel Gomes

17/09/2013

Como assim?
Voce executa ele onde? Na aplicação ou direto no banco?


Direto no banco, pelo IBEXPERT.
GOSTEI 0
Fabiano Carvalho

Fabiano Carvalho

17/09/2013

essas tabelas realmente tem referencias?

Execute o comando abaixo, e veja se retorna alguma linha

SELECT A.*
FROM PRODUTONOVO  as A
LEFT JOIN PRODUTO B
ON A.codprod = B.codprod
WHERE B.codprod IS NULL
GOSTEI 0
Osiel Gomes

Osiel Gomes

17/09/2013

essas tabelas realmente tem referencias?

Execute o comando abaixo, e veja se retorna alguma linha

SELECT A.*
FROM PRODUTONOVO  as A
LEFT JOIN PRODUTO B
ON A.codprod = B.codprod
WHERE B.codprod IS NULL


Sim retorno com informações...

As tabelas não tem um ligação uma com a outra pois só criei essa tabela PRODUTONOVO para retirar os dados dela, pois as informações da outra esta com problemas
GOSTEI 0
Fabiano Carvalho

Fabiano Carvalho

17/09/2013

Voce quer tirar de uma e passar pra outra, então é INSERT...SELECT e não update..

Explique exatamente o que voce precisa...
GOSTEI 0
Osiel Gomes

Osiel Gomes

17/09/2013

Voce quer tirar de uma e passar pra outra, então é INSERT...SELECT e não update..

Explique exatamente o que voce precisa...



Eu tenho uma tabela chamada PRODUTONOVO que esta com as informações correta na realidade só quero a descrição dessa tabela e jogar na tabela PRODUTO sendo que PRODUTO E PRODUTONOVO tem os mesmos campos e registros só que na tabela PRODUTONOVO o campo descrição esta do jeito que eu quero, então comparo os mesmo código entre as duas e só pego a descrição e jogo na outra através de update.

Não posso inserir por que as duas já estão com os registros.

Entendeu?
GOSTEI 0
Osiel Gomes

Osiel Gomes

17/09/2013

Alguma outra sugestão dos colegas?
GOSTEI 0
Fabiano Carvalho

Fabiano Carvalho

17/09/2013

Veja se retorna registros isso..
Naquela outra consulta retorno, porque existe registros na tabela produtonovo que não estão na tabela produto...

SELECT A.*
FROM PRODUTONOVO  as A
INNER JOIN PRODUTO B
ON A.codprod = B.codprod


Se essa consulta nao retornar nada, é porque tem algo errado, e os registros não se coincidem
GOSTEI 0
Deivison Melo

Deivison Melo

17/09/2013

Dá uma olhada no post abaixo:

[url]https://www.devmedia.com.br/uso-de-joins-em-instrucoes-update-e-delete-parte-02/9464[/url]

Abração e bons códigos!
GOSTEI 0
Deivison Melo

Deivison Melo

17/09/2013

Retificando:

Dá uma olhada nos posts abaixo:

Primeira parte

[url]https://www.devmedia.com.br/uso-de-joins-em-instrucoes-update-e-delete-parte-01/9444[/url]

Segunda parte

[url]https://www.devmedia.com.br/uso-de-joins-em-instrucoes-update-e-delete-parte-02/9464[/url]

Abração e bons códigos!
GOSTEI 0
Osiel Gomes

Osiel Gomes

17/09/2013

Veja se retorna registros isso..
Naquela outra consulta retorno, porque existe registros na tabela produtonovo que não estão na tabela produto...

SELECT A.*
FROM PRODUTONOVO  as A
INNER JOIN PRODUTO B
ON A.codprod = B.codprod


Se essa consulta nao retornar nada, é porque tem algo errado, e os registros não se coincidem


Retorna centenas de registros.
GOSTEI 0
Deivison Melo

Deivison Melo

17/09/2013

se seu select for o aqui abaixo:

SELECT A.*
FROM PRODUTONOVO as A
INNER JOIN PRODUTO B
ON A.codprod = B.codprod

Kd a restrição?

SELECT A.*
FROM PRODUTONOVO as A
INNER JOIN PRODUTO B
ON A.codprod = B.codprod
where A.codprod = codigo_qualquer // que seria o q vc quer atualizar realmente!




GOSTEI 0
Fabiano Carvalho

Fabiano Carvalho

17/09/2013

se seu select for o aqui abaixo:

SELECT A.*
FROM PRODUTONOVO as A
INNER JOIN PRODUTO B
ON A.codprod = B.codprod

Kd a restrição?

SELECT A.*
FROM PRODUTONOVO as A
INNER JOIN PRODUTO B
ON A.codprod = B.codprod
where A.codprod = codigo_qualquer // que seria o q vc quer atualizar realmente!


Boa ideia! Autor, faça isso:

SELECT A.*
FROM PRODUTONOVO as A
INNER JOIN PRODUTO B
ON A.codprod = B.codprod
where A.descricao <> b.descricao

Se não mostrar nada, é porque os dados já estão atualizados
GOSTEI 0
POSTAR