ERRO AO EXECUTAR SQL UPDATE COM TABELAS UNIDAS

RAPHAELNNOE 30/05/2012 23:00:07
#403187
Olá, pessoal!
Sou iniciante na linguagem SQL e não estou conseguindo executar a seguinte tarefa:
Tenho um base de dados FDB (ME.FDB) na qual possui varias tabelas, porém no processo utilizo apenas duas, a tabela PRODUTOS_DESCRICOES (id_produto, descricao) e a tabela PRODUTOS_PRECOS (id_produto, produto_preco).
Enfim, o quero é que apenas os produtos que possuem em sua descrição a expressão [Ô]DOTE ESM BL TRAD[Ô] sofram alteração no preço de venda. Para isso usei a seguinte SQL.

UPDATE PRODUTOS_PRECOS
SET PRECO_VENDA = 2
FROM PRODUTOS_PRECOS
INNER JOIN PRODUTOS_DESCRICOES
ON PRODUTOS_PRECOS.ID_PRODUTO = PRODUTOS_DESCRICOES.ID_PRODUTO
WHERE PRODUTOS_DESCRICOES.DESCRICAO LIKE [ô]%DOTE ESM BL TRAD%[ô]

O EMS InterBase/Firebird Manager 3 retorna com o erro:
fmSQLEditor.Query:
Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Token unknown - line 3, column 1.
FROM.

*A conexão com a base de dados é feita pelo Firebird 2.1.3

Desde já, agradeço pela cooperação!
OMAR2011 31/05/2012 07:28:04
#403198

Pra que criar duas tabelas com o mesmo propósito.
Apenas uma é o suficiente.


RAPHAELNNOE 31/05/2012 10:23:34
#403220
OMAR2011 eu concordo com você,no que diz respeito a uma tabela ser suficiente, o problema é que não fui eu que criei a base de dados, ela é de uma empresa que estou trabalhando.
LLAIA 31/05/2012 11:12:18
#403230
Tente assim. Eu coloquei alias e mudei a primeira linha.

UPDATE SET PP.PRECO_VENDA = 2
FROM PRODUTOS_PRECOS PP
INNER JOIN PRODUTOS_DESCRICOES PD
ON PP.ID_PRODUTO = PD.ID_PRODUTO
WHERE PD.DESCRICAO LIKE [ô]%DOTE ESM BL TRAD%[ô]



Creio que não funcione, pois ao verificar a documentação da versão 2.5 não encontrei no modelo da DML referência ao JOIN no UPDATE: http://www.firebirdsql.org/file/documentation/reference_manuals/reference_material/html/langrefupd25-update.html#langrefupd25-update.

Mas isso é fácil de resolver:

UPDATE PRODUTOS_PRECOS PP SET PP.PRECO_VENDA = 2
WHERE PP.ID_PRODUTO IN ( SELECT PD.ID_PRODUTO FROM PRODUTOS_DESCRICOES PD WHERE PD.DESCRICAO LIKE [ô]%DOTE ESM BL TRAD%[ô])



RAPHAELNNOE 31/05/2012 15:17:48
#403270
LLAIA, a segunda opção realmente deu certo. Muito obrigado!

Tópico encerrado , respostas não são mais permitidas