将子查询分离到自己的SELECT语句中

时间:2011-06-08 10:56:23

标签: mysql subquery

我正在处理一些旧代码(不是我的代码),我需要优化以下查询,因为它需要很长时间才能完成。我的猜测是子查询导致它

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)

我在考虑在更新语句之前在单独的查询中选择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;

1 个答案:

答案 0 :(得分: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]