Обновление Mysql с ГДЕ В И СОЕДИНЯЕТСЯ - PullRequest
1 голос
/ 23 мая 2019

Я пробовал разные способы, но не могу понять, где мне нужно разместить фигурные скобки и как правильно заставить этот запрос работать.

Ошибка, которую я получаю:

ОШИБКА 1093 (HY000): Вы не можете указать целевую таблицу 'tb1' для обновления в предложении FROM

Код:

    UPDATE tb1
SET company_id=258
WHERE id IN
    (SELECT c.well_id container_well_id
     FROM tb2 b
     INNER JOIN tb3 c ON b.id = c.id
     INNER JOIN tb1 w ON w.id = c.well_id
     WHERE b.id_number IN (2609,
                           4279,
                           4082,
                           4083,
                           4117,
                           3818,
                           3154,
                           3813,
                           3822,
                           3819)
       AND c.company_id = 258
       AND w.company_id = 259 );

Ответы [ 2 ]

1 голос
/ 23 мая 2019

Просто добавьте внешний выбор для вложения текущего подзапроса:

UPDATE tb1
SET company_id=258
WHERE id IN
  (SELECT t.container_well_id FROM
    (SELECT c.well_id container_well_id
     FROM tb2 b
     INNER JOIN tb3 c ON b.id = c.id
     INNER JOIN tb1 w ON w.id = c.well_id
     WHERE b.id_number IN (2609,
                           4279,
                           4082,
                           4083,
                           4117,
                           3818,
                           3154,
                           3813,
                           3822,
                           3819)
       AND c.company_id = 258
       AND w.company_id = 259 ) t
  );
1 голос
/ 23 мая 2019

Один метод заключается в использовании join вместо:

UPDATE tb1 JOIN
       (SELECT c.well_id container_well_id
        FROM tb2 b JOIN
             tb3 c ON b.id = c.id JOIN
             tb1 w ON w.id = c.well_id
        WHERE b.id_number IN (2609, 4279, 4082, 4083, 4117, 3818, 3154, 3813, 3822, 3819
                             ) AND
              c.company_id = 258 AND
              w.company_id = 259
        ) x
        ON x.container_well_id = tb1.id
    SET company_id = 258;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...