ERRO AO EXECUTAR SQL UPDATE COM TABELAS UNIDAS
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!
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!
Pra que criar duas tabelas com o mesmo propósito.
Apenas uma é o suficiente.
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.
Tente assim. Eu coloquei alias e mudei a primeira linha.
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 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%[ô])
LLAIA, a segunda opção realmente deu certo. Muito obrigado!
Tópico encerrado , respostas não são mais permitidas