Neste video mostro como usar um subselect / subquery junto com o comando upgrade.
Nos exemplos atualizo campos da tabela de produto como valor NCM buscando o valor da tabela de IPBT. Outro Exemplo é de baixar o estoque de produtos usando uma query que retorna os itens do cupom.
Comandos Exemplo 001:
No Exemplo abaixo temos 2 tabelas, uma de produtos e uma IBPT.
Onde atualizamos o campo ValorIbpt do produto com a resposta do subselect da tabela IBPT
update produto pr
set pr.VrIPBTProd = (select ib.ValorIBPT
from ibptax ib
where ib.CodNCM = pr.NcmProd )
Exemplo 002:
Neste Exemplo temos um cupom com “n” itens.
Então fazemos o update para “baixar” o estoque de um determinado cupom.
update produto
set produto.EstAtualProd = produto.EstAtualProd –
(select tmpite.tite_Qtde from tmpite
where tmpite.tite_idVenda = 11 and tmpite.tite_CodPro = produto.CodProd)
where produto.CodProd in (select tmpite.tite_CodPro from tmpite
where tmpite.tite_idVenda = 11)
#bancodedados #sql #comandosql #subselect #update #subquery #sqlduastabelas
Olá meu amigo, poderia me dar uma ajuda neste mesmo pensamento de sql?
Sou novo nessa área de banco de dados e sql.
Utilizo banco firebird.
Meu problema está no seguinte…
update PRODUTO set NCMICOD = (select PRODRAIZ.NCMICOD from PRODRAIZ where PRODRAIZ.PRODA60CODBAR = PRODUTO.PROD60CODBAR);
Neste caso, eu quero atualizar a tablema NCMICOD da tabela
PRODUTO com o subselect selecionando o NCMICOD da tabela PRODRAIZ, porém preciso que o só puxe o NCMICOD onde os campo PRODA60CODBAR seja igual nas tabelas PRODRAIZ e PRODUTO.
Quando eu compilo o update que mandei acima, retorna:
“multiple rows in singleton”
Poderia me dar uma luz de onde estou errando??
Desde já agradeço meu amigo
Um forte abraço
como ele esta retornando mais que um registro, acredito que possa ser isso, tente usar um distinct:
update PRODUTO set NCMICOD = (select distinct PRODRAIZ.NCMICOD from PRODRAIZ where PRODRAIZ.PRODA60CODBAR = PRODUTO.PROD60CODBAR);