Como usar um subselect com update

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

Publicado por

Daniel Morais

Comecei na área de TI há um bom tempo (1991) com aqueles cursos de MS-DOS 6.22, WordStar, Lotus123, Dbase III Plus, etc. Adorei programar em Dbase III Plus utilizando Dbf; achei fantástico quando aprendi a programar em Clipper Summer 87 e posteriormente Clipper 5.x, que era muito estável em rede utilizando Novell NetWare. Desde então sou um fanático por TI. Hoje desenvolvo aplicações para Windows, Android, OS X e Linux utilizando Lazarus (free Pascal) . Blogueiro (www.infocotidiano.com.br, www.aprendalazarus.com.br, www.startdb.info). Além dos meus Blogs tenho um canal no YouTube o www.youtube.com.br/infocotidiano onde tenho mais de 1 Milhão de visualizações com vídeos de dicas diversificadas que vão desde solucionar um erro de impressão, curso sobre banco de dados, até criar software multi-plataforma utilizando o Lazarus.

2 comentários em “Como usar um subselect com update”

  1. 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

    1. 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);

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *