编辑:现在工作,这篇文章底部的解决方案。
我已经尝试创建这个查询几个小时了,但没有成功:
UPDATE tasks
SET `Order`=
(
CASE WHEN
(
SELECT EXISTS
(
SELECT 1
FROM user_job_tasks ujt
WHERE ujt.JobID = :jobID AND ujt.TaskID = LAST_INSERT_ID()
)
)
THEN
(
SELECT `order` FROM
(
SELECT MAX(t.`Order`)+1 AS `Order`
FROM user_job_tasks ujt
LEFT OUTER JOIN tasks t ON ujt.TaskID = t.ID
WHERE ujt.JobID = :jobID
) AS temp
)
ELSE
(
1
)
END
)
WHERE ID = LAST_INSERT_ID()
现在,重点是更新tasks
表的列Order
,其中ID
等于某些值(此处为 LAST_INSERT_ID())。
user_job_tasks
如果在where中存在任何记录jobID
并taskID
匹配值,我想设置为where中找到的Order
最大值 + 1匹配值。Order
user_job_tasks
jobID
如果不是,Order
将设置为 1。
我只是得到一个错误General error: 1093 You can't specify target table 'tasks' for update in FROM clause
。我在查询语法中找不到任何错误。
抱歉解释混乱,也许我应该去睡觉。
工作解决方案:
UPDATE tasks
SET `Order`=
(
COALESCE
(
(
SELECT `Order` FROM
(
SELECT MAX(t.`Order`)+1 AS `Order`
FROM user_job_tasks ujt
LEFT OUTER JOIN tasks t ON ujt.TaskID = t.ID
WHERE ujt.JobID = :jobID
) AS temp
),
1
)
)
WHERE ID = LAST_INSERT_ID()