MySQL таблица была указана дважды? - PullRequest
0 голосов
/ 09 декабря 2018

Почему я получил ошибку при попытке выполнить этот запрос:

UPDATE ordersperformers AS t1 SET t1.Status = 1 
where not exists (
SELECT 1 FROM ordersperformers 
   WHERE ordersperformers.Orders_Id = 3 
    AND (ordersperformers.Status = 1 OR ordersperformers.Status = 2))
    AND t1.Orders_Id = 3 AND t1.Users_Id = 5;

Почему MySQL не понимает, что я работаю с таблицей ordersperformers?

Ошибка:

#1093 - Table 't1' is specified twice, both as a target for 'UPDATE' and as a separate source for data.

Если выполнить запрос:

UPDATE ordersperformers SET Status = 1 
where  ordersperformers.Status NOT IN (1,2)
AND Orders_Id = 3;

В любом случае будет обновлена ​​одна строка:

enter image description here

Но мне не нужно обновлять строки, потому что таблица с Orders_Id = 3 имеет одну строку с Status = 1

1 Ответ

0 голосов
/ 09 декабря 2018

Вам нужно использовать EXISTS(), если вы хотите обновить Status = 1 с тем же order_id, который имеет хотя бы один Status = 1.Кроме того, поскольку мы проверяем одну и ту же таблицу, вам нужно установить ее в sub-query (да, внутри скобки), чтобы избежать конфликта.

Просто вам нужно сделать что-то вроде этого:

РЕДАКТОР СЦЕНАРИИ:

UPDATE ordersperformers as O1 
SET O1.Status = 1 
where  EXISTS 
            (SELECT 1
             FROM (select * from ordersperformers) AS O2
             WHERE O1.Orders_Id = O2.Orders_Id
             AND O2.Status = 1
             )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...