none
Update com select RRS feed

  • Pergunta

  • Preciso atualizar os campos de uma tabela da seguinte forma:

    Tabela A já existe o ID da tabela B Salva como chave estrangeira, preciso pegar o campo DATA da tabela B e colocar no campo DATA da tabela A que sejam do mesmo ID.

    TABELA A
    ----------
    ID_A
    DATA_A
    FK_ID_B

    TABELA B
    ------------
    ID_B
    DATA_B

    O campo DATA_A foi criado agora, esta com valor null, o restante dos campos já estao alimentados



    segunda-feira, 8 de fevereiro de 2021 22:09

Respostas

  • Eduardo,

    Dizer que é a mais correta é algo bem abstrato.

    O que você deve fazer na sua subquery é justamente ter certeza se os dados retornados estão de acordo com a sua necessidade.

    Quando você se refere ao uso do comando TOP para limitar o retorno de linhas na subquery, pode ser aplicado, mas vai depender justamente do que você precisa.

    Poderíamos pensar em fazer uma pequena alteração, ao invês de usar subquery para trazer o resultado, transformar este bloco Update em um Update com Junção.

    Veja o exemplo:

    Update D
    Set D.DATA_A = H.DATA_B
    From TABELA_A D Inner Join Tabela_B H
    	         On H.ID_B = D.FK_ID_B
    Go


    Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | MTAC | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    • Marcado como Resposta Eduardo Michetti segunda-feira, 1 de março de 2021 15:04
    terça-feira, 9 de fevereiro de 2021 11:01
  • Consegui resolver desta forma, não sei se foi a correta, mas se alguém puder orientar, se eu deveria ter usado o TOP no segundo select ou alguma outra dica.

    update D
    set D.DATA_A = (select DATA_B from TABELA_B H where H.ID_B = D.FK_ID_B)
    from TABELA_A D

    • Marcado como Resposta Eduardo Michetti terça-feira, 9 de fevereiro de 2021 02:50
    segunda-feira, 8 de fevereiro de 2021 22:25

Todas as Respostas

  • Consegui resolver desta forma, não sei se foi a correta, mas se alguém puder orientar, se eu deveria ter usado o TOP no segundo select ou alguma outra dica.

    update D
    set D.DATA_A = (select DATA_B from TABELA_B H where H.ID_B = D.FK_ID_B)
    from TABELA_A D

    • Marcado como Resposta Eduardo Michetti terça-feira, 9 de fevereiro de 2021 02:50
    segunda-feira, 8 de fevereiro de 2021 22:25
  • Eduardo,

    Dizer que é a mais correta é algo bem abstrato.

    O que você deve fazer na sua subquery é justamente ter certeza se os dados retornados estão de acordo com a sua necessidade.

    Quando você se refere ao uso do comando TOP para limitar o retorno de linhas na subquery, pode ser aplicado, mas vai depender justamente do que você precisa.

    Poderíamos pensar em fazer uma pequena alteração, ao invês de usar subquery para trazer o resultado, transformar este bloco Update em um Update com Junção.

    Veja o exemplo:

    Update D
    Set D.DATA_A = H.DATA_B
    From TABELA_A D Inner Join Tabela_B H
    	         On H.ID_B = D.FK_ID_B
    Go


    Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | MTAC | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    • Marcado como Resposta Eduardo Michetti segunda-feira, 1 de março de 2021 15:04
    terça-feira, 9 de fevereiro de 2021 11:01
  • Bom dia,

    Eduardo, o Top não é necessário pois pelo que entendi da estrutura das suas tabelas, a subquery nunca vai retornar mais que uma linha, já que a coluna ID_B é a PK da tabela B e não existe mais de uma linha com o mesmo valor nessa coluna.

    Espero que ajude


    Assinatura: http://www.imoveisemexposicao.com.br

    terça-feira, 9 de fevereiro de 2021 12:16
  • Realmente desta forma sua funcionou bem melhor, muito obrigado pela atenção.
    segunda-feira, 1 de março de 2021 15:05