code: def test_update_from_select(self, mock_handler):
      self.set_handler(
          mock_handler, name="pg", tables={"tasks": self.df}
      )
  
      # --- use predictor ---
      self.set_predictor(self.task_predictor)
      sql = """
              update
                  pg.table2
              set
                  a1 = df.a,
                  c1 = df.c
              from
                  (
                      SELECT model.a as a, model.b as b, model.p as c
                        FROM pg.tasks as t
                       JOIN mindsdb.task_model as model
                       WHERE t.a=1
                  )
                  as df
              where
                  table2.a1 = df.a
                  and table2.b1 = df.b
          """
  
      self.execute(sql)
  
      # 1 select and 2 updates
      assert mock_handler().query.call_count == 3
  
      # second is update
      assert (
          mock_handler().query.call_args_list[1][0][0].to_string()
          == "update table2 set a1=1, c1='ccc' where (a1 = 1) AND (b1 = 'ccc')"
      )
  
imports: from unittest.mock import patch
  import datetime
  import tempfile
  import pytest
  import pandas
  import numpy
  from mindsdb_sql.render.sqlalchemy_render import SqlalchemyRender
  from mindsdb.api.executor.utilities.sql import query_df
  from mindsdb.api.mysql.mysql_proxy.utilities.lightwood_dtype import dtype
  from .executor_test_base import BaseExecutorMockPredictor
label_desc: Use image node_id 2 for calling the TestComplexQueries obj's underlying member method code with example usage: obj.test_update_from_select(mock_handler) without return types