如何将值传递给mySQL嵌套子查询?

时间:2013-10-21 20:44:58

标签: mysql subquery

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

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个级别?

谢谢! -Nico

1 个答案:

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

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