Add workaround for UPDATE with subquery when using MySQL
When trying to run an UPDATE, this query is ran:
```sql
UPDATE `todos`
INNER JOIN `projects` ON `projects`.`id` = `todos`.`project_id`
SET `todos`.`state` = 'done'
WHERE `todos`.`user_id` = 4
AND (`todos`.`state` IN ('pending'))
AND (EXISTS
(SELECT 1
FROM `project_authorizations`
WHERE `project_authorizations`.`user_id` = 4
AND (project_authorizations.project_id = projects.id))
OR projects.visibility_level IN (10,
20))
AND `projects`.`id` IN
(SELECT `todos`.`project_id`
FROM `todos`
WHERE `todos`.`user_id` = 4
AND (`todos`.`state` IN ('pending')))
AND (`todos`.`state` != 'done')
```
But MySQL does not like the subquery used to filter on
`projects.id IN (SELECT ...`
Because the subquery queries from the same table:
> Error: You can’t specify target table ‘todos’ for update in FROM clause
So as workaround, wrap it in another subquery, where the original
subquery is aliased using the `AS` statement.
Mostly inspired by https://stackoverflow.com/a/43610081/89376
Showing
Please
register
or
sign in
to comment