0

我有一个复杂的查询,归结为:

UPDATE usertable
SET userstatus =
    (SELECT numposts*5 as status FROM
        (SELECT count(*) as numposts FROM poststable WHERE poststable.userid = usertable.userid) as table2
    )
WHERE usertable.userid > 0

这是一个更新每个用户记录并根据子表中的行数将用户的状态设置为某个计算值的查询。

问题是 usertable.userid 没有将其归结为二级子查询。

查询像这样呈现时有效,只有一层:

UPDATE usertable
SET userstatus =
    (SELECT count(*) as numposts FROM poststable WHERE poststable.userid = usertable.userid)
WHERE usertable.userid > 0

问题是实际情况下的计算查询非常复杂。

问题是:有没有办法让我得到一个二级子查询来识别来自顶级查询的值?在这个例子中,有没有办法让 usertable.userid 识别到 2 个级别?

谢谢!-尼科

4

1 回答 1

1

我不会逐行执行相关子查询,而是生成一个派生表作为所有用户 ID 的一次性子查询,然后将其连接到要更新的表中。MySQL 支持多表更新语法:

UPDATE usertable AS u
LEFT OUTER JOIN (
    SELECT userid, COUNT(*) AS numposts
    FROM poststable
    GROUP BY userid
    ORDER BY NULL
) AS t USING (userid)
SET u.userstatus = 5 * COALESCE(t.numposts, 0)
WHERE u.userid > 0

我知道你说你的真实查询更复杂,但同样的原理可能会解决它。

于 2013-10-21T21:11:05.793 回答