Pular para o conteúdo
Visualizando 4 posts - 1 até 4 (de 4 do total)
  • Autor
    Posts
  • #104690
    Avatar de maxmcostamaxmcosta
    Participante

      Pessoal, sei que é possível realizar o update em uma tabela com base no resultado de um select, porem é possível fazer isso quando se tem LEFT JOIN?

      No meu caso, tenho esse select:
      SELECT CO.conta, ORC.VALOR vO, REA.VALOR vR
      FROM contas CO
      LEFT JOIN orcado ORC ON ORC.ID_Conta = CO.ID AND ORC.ID_PAC = '1' AND ORC.data BETWEEN '01/08/2012' AND '01/08/2012'
      LEFT JOIN realizado REA ON REA.ID_Conta = CO.ID AND REA.ID_PAC = '1' AND REA.data BETWEEN '01/08/2012' AND '01/08/2012'
      WHERE CO.SUBGRUPO = '1.0' OR CO.SUBGRUPO = '2.0' OR CO.SUBGRUPO = '3.0'

      Para não precisar fazer um loop no resultado e ir alterando outra trabela registro por registro, gostaria de colocar esse UPDATE juntamente com o SELECT acima, ou seja, realizo o UPDATE dos valores com base no resultado do SELECT:


      UPDATE RELDETALHADO SET orcado1 = orcado.valor, realizado1 = realizado.valor WHERE conta = contas.conta

      Como ficaria isso?

      Grato!

      #104692
      Avatar de rmanrman
      Participante

        @maxmcosta

        Solução utilizando subquery:


        UPDATE RELDETALHADO SET
        orcado1 = (
        SELECT ORC.VALOR vO
        FROM contas CO
        LEFT JOIN orcado ORC ON ORC.ID_Conta = CO.ID AND ORC.ID_PAC = '1' AND ORC.data BETWEEN '01/08/2012' AND '01/08/2012'
        WHERE CO.SUBGRUPO = '1.0' OR CO.SUBGRUPO = '2.0' OR CO.SUBGRUPO = '3.0'
        )
        , realizado1 = (
        SELECT REA.VALOR vR
        FROM contas CO
        LEFT JOIN realizado REA ON REA.ID_Conta = CO.ID AND REA.ID_PAC = '1' AND REA.data BETWEEN '01/08/2012' AND '01/08/2012'
        WHERE CO.SUBGRUPO = '1.0' OR CO.SUBGRUPO = '2.0' OR CO.SUBGRUPO = '3.0'
        )
        WHERE conta = (
        SELECT CO.conta
        FROM contas CO
        WHERE CO.SUBGRUPO = '1.0' OR CO.SUBGRUPO = '2.0' OR CO.SUBGRUPO = '3.0'
        )

        #104693
        Avatar de maxmcostamaxmcosta
        Participante

          Me retorno esse erro:

          Relatório de erro:
          Erro de SQL: ORA-01427: a subconsulta de uma única linha retorna mais de uma linha
          01427. 00000 – “single-row subquery returns more than one row”
          *Cause:
          *Action:

          #104694
          Avatar de rmanrman
          Participante

            @maxmcosta

            Me desculpe, realmente eu não tinha analisado direito, por subquery não vai dar certo, tente fazer um MERGE em vez de UPDATE, segue um artigo sobre MERGE:

            http://certificacaobd.com.br/2011/07/29/merge/

          Visualizando 4 posts - 1 até 4 (de 4 do total)
          • Você deve fazer login para responder a este tópico.
          plugins premium WordPress