我正在处理一些旧代码(不是我的代码),我需要优化以下查询,因为它需要很长时间才能完成。我猜是子查询导致的
UPDATE topic a, cycle c
SET a.cycleId = c.id
WHERE a.id = 1
AND ((c.year * 100) + c.sequence) = (
SELECT MIN((`year` * 100) + sequence)
FROM cycle c2
WHERE c2.groupId = a.groupId)
我想在update语句之前在一个单独的查询中选择cycleId(c.id),但是在分离它时遇到了问题。到目前为止,我有以下内容,但我还没有考虑到
(c.year * 100) + c.sequence)
和不得不说,我不知道这是做什么!SELECT c.id
FROM cycle c
LEFT JOIN topic a ON c.groupId = a.groupId
WHERE a.id = 1;
最佳答案
这是我暂时的解决办法。结果来自:
SELECT MIN((`year` * 100) + sequence)
FROM cycle c
INNER JOIN topic a ON c.groupId = a.groupId
WHERE a.id = 1;
在主查询中使用:
UPDATE topic a, cycle c
SET a.cycleId = c.id
WHERE a.id = 1
AND ((c.year * 100) + c.sequence) = [result]
关于mysql - 将子查询分成自己的SELECT语句,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6277634/