Ajuda Update com inner join no firebird

Firebird

18/09/2013

Bom dia Mestres,

sou bem iniciante em FB e estou com a seguinte dificuldade:

O sistema que estou fazendo manutenção
tem uma tabela que guarda as informações do produto (PROD),
outra armazena a Unidade do produto (UNIDADE)
em outra é gravado o ID que relaciona as duas tabelas (UNPROD)

preciso fazer um update ou insert em um campo da tabela PROD usando como condicional a informação contida na tabela UNIDADE

fiz da seguinte maneira, sem sucesso:

update m3_prod
set precoliqfor = 1
where m3_prod.codprod in
(select a.codprod from
m3_prod a
inner join m3_unprod b on (a.id = b.idf_prod)
inner join M3_unidade c on (b.idf_unidade = c.id)
where c.codigo = 'Un'
AND
a.status = '1'
and
a.nmprod NOT LIKE 'caixa%'
and
a.codprod not like '99.8%')



porém desta maneira não esta considerando o campo a condicional do c.codigo (unica condição que pertence a outra tabela) e
o update esta se aplicando a todas as Unidades, no select funciona a condição 'Un' o que me leva a crer que o join esta
correto

só para explicar de uma maneira mais fácil, preciso inserir 1 no campo "precoliqfor" da tabela PROD sempre que o campo
"codigo" da tabela UNIDADE for 'Un'

Desde já Muito Obrigado,
Rodrigo Lopes
Rodrigo Lopes

Rodrigo Lopes

Curtidas 0

Respostas

Guilherme

Guilherme

18/09/2013

Rodrigo, se entendi certo, sua query não está pegando a condição:

where c.codigo = ''Un''


Tenta colocar a condição dentro do INNER JOIN, assim:

update m3_prod
set precoliqfor = 1
where m3_prod.codprod in
(select a.codprod from
m3_prod a
inner join m3_unprod b on (a.id = b.idf_prod)
inner join M3_unidade c on (b.idf_unidade = c.id and c.codigo = ''Un'')
where
a.status = ''1''
and
a.nmprod NOT LIKE ''caixa%''
and
a.codprod not like ''99.8%'')
GOSTEI 0
Guilherme

Guilherme

18/09/2013

Só retira as aspas extras, nem sei porquê duplicou.
GOSTEI 0
POSTAR