2016-12-05 4 views
1

мне нужно обновить свою базу данных ее мягкое удаление на несколько подряда основы в locationIdMySQL запрос на обновление на нескольких строках

update device d 
set d.deleteDate='2016-05-07' 
where d.id in (select dtg.deviceId from devicestogroups dtg 
       where dtg.groupId in (select g.id from `group` g 
            where g.locationId ='1')); 

При запуске запроса я получаю ошибку:

Error Code: 1175. You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column To disable safe mode, toggle the option in Preferences -> SQL Editor and reconnect.

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

ответ

2

Попробуйте, было бы еще лучше, чтобы использовать объединение вместо подзапроса с IN:

UPDATE device d 
INNER JOIN devicestogroups dtg ON dtg.deviceId = d.id 
INNER JOIN `group` g ON g.id = dtg.groupId 
    AND g.locationId ='1' 
SET d.deleteDate='2016-05-07' 

ИЛИ

UPDATE device d 
INNER JOIN devicestogroups dtg ON dtg.deviceId = d.id 
INNER JOIN `group` g ON g.id = dtg.groupId 
SET d.deleteDate='2016-05-07' 
WHERE g.locationId ='1' 
+0

Спасибо @Suraz !! – suresh

0

попробовать это:

update device set deleteDate='2016-05-07' 
where id in (select dtg.deviceId from devicestogroups dtg where dtg.groupId in (select g.id from `group` g where g.locationId ='1')); 

если выполнить обновление не используя псевдоним столбца для обновления

+0

Спасибо за ваш ответ, но по-прежнему запрос не обновлять по той же причине – suresh

0

Попробуйте это:

update d 
set d.deleteDate='2016-05-07' 
from device d 
inner join devicestogroups dtg on d.id=dtg.deviceId 
inner join `group` g on g.id =dtg.groupId 
where g.locationId ='1' 
Смежные вопросы