2017-01-27 2 views
1
update test as t 
SET t.agent=86 
where t.id in (select tgt.test_id from test_group_tests as tgt where tgt.test_id in 
(select t.id from test where t.agent in (1)) and tgt.testgroup_id not in (20,58,23,37,447)); 

Я пробовал этот запрос, и я вижу эту ошибку. Это отсутствие внутреннего соединения или что-то еще?Код ошибки: 1093. Вы не можете указать целевую таблицу 't' для обновления в FROM FROM

ответ

2

В общем, MySQL не позволит вам указать SELECT таблицу и UPDATE ту же таблицу в том же запросе. Однако вы можете написать таблицу с несколькими таблицами UPDATE путем объединения таблиц.

Как я прочитал ваш вопрос, кажется, следующим будет делать то же самое:

UPDATE test AS t 
JOIN test_group_test AS tgt ON (t.id=tgt.test_id) 
JOIN test AS t2 ON (tgt.test_id=t2.id) 
SET t.agent=86 
WHERE t2.agent IN (1) 
    AND tgt.testgroup_id NOT IN (20,58,23,37,447); 

Хотя я не проверял этот запрос. Это означает пример использования JOIN для таблицы с несколькими UPDATE. Поэтому тщательно проверьте его, чтобы убедиться, что он делает то, что вы намереваетесь, и сохраняйте резервную копию исходных данных, если это не так.

См. https://dev.mysql.com/doc/refman/5.7/en/update.html для получения дополнительной информации о нескольких таблицах UPDATE в MySQL.

+0

Большое вам спасибо. Это сработало отлично. У меня были записи с дубликатами, но я должен был добавить их в NOT IN для выполнения моего запроса. Я узнал новую вещь, используя JOIN в "multi table" – Raj

0

В нижеприведенном коде подзапрос вернет все идентификаторы теста не в группы (20,58,23,37,447), но обновление обновит только те тесты, в которых агент находится в (1).

update test as t 
SET t.agent=86 
where t.agent in (1) 
and t.id in 
(
    select 
    tgt.test_id 
    from test_group_tests as tgt 
    where tgt.testgroup_id not in (20,58,23,37,447) 
); 
Смежные вопросы

 Смежные вопросы