UPDATE - SELECT - MYSQL # 1093 - Вы не можете указать целевую таблицу 'temp1' для обновления в предложении FROM - PullRequest
0 голосов
/ 26 апреля 2020

Я не могу найти решение для исправления этого большого запроса, я всегда получаю сообщение об ошибке из базы данных.

У меня есть таблицы tre, и мне нужно внести изменения в некоторый атрибут при некоторых условиях:

UPDATE o36t_orders as temp1,
  mytable as temp2
SET
  temp1.bonifico = 1,
  temp2.ultimo = 1
WHERE
  temp1.id_order IN (
    SELECT
      id_order
    FROM o36t_orders
    LEFT JOIN o36t_address ON (o36t_address.id_address = o36t_orders.id_address_delivery)
    LEFT JOIN mytable ON (
        mytable.Causale = CONCAT(
          o36t_address.lastname,
          ' ',
          o36t_address.firstname
        )
      )
    WHERE
      o36t_orders.bonifico <> 1
  )
  AND temp2.id IN (
    SELECT
      id
    FROM o36t_orders
    LEFT JOIN o36t_address ON (o36t_address.id_address = o36t_orders.id_address_delivery)
    LEFT JOIN mytable ON (
        mytable.Causale = CONCAT(
          o36t_address.lastname,
          ' ',
          o36t_address.firstname
        )
      )
    WHERE
      o36t_orders.bonifico <> 1
  ) 

1 Ответ

0 голосов
/ 26 апреля 2020

Поскольку подзапросы предложений 2 IN идентичны (за исключением перенастроенного столбца), я думаю, что вы можете сделать то, что вы хотите, путем прямого внутреннего объединения двух таблиц и этого подзапроса (возвращающего оба столбца):

UPDATE o36t_orders temp1
INNER JOIN (
    SELECT
      id, id_order
    FROM o36t_orders
    LEFT JOIN o36t_address ON (o36t_address.id_address = o36t_orders.id_address_delivery)
    LEFT JOIN mytable ON (
        mytable.Causale = CONCAT(
          o36t_address.lastname,
          ' ',
          o36t_address.firstname
        )
      )
    WHERE
      o36t_orders.bonifico <> 1
) t ON t.id_order = temp1.id_order
INNER JOIN mytable temp2 ON temp2.id = t.id
SET
  temp1.bonifico = 1,
  temp2.ultimo = 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...