所以目前我有一个包含2个子查询但是与源表相同的查询。
UPDATE users
SET UserFollow=(SELECT COUNT(*)
FROM (SELECT * FROM users) as u1
WHERE u1.ReferralID=users.UserID
AND u1.Activated=0),
UserFollower=(SELECT COUNT(*)
FROM (SELECT * FROM users) as u2
WHERE u2.ReferralID=users.UserID
AND u2.Activated=1)
对我来说它执行的时间恰好超过4毫秒,这对于SQL查询来说是一种不好的做法。有人可以帮我提供一个更实用的SQL查询吗?
它基本上做的是获取连接到users表中每个用户帐户的Activated和Deactivated帐户的计数,并将其保存在users表上的UserFollow和UserFollower列中。
答案 0 :(得分:2)
我会尝试:
UPDATE users
SET (UserFollow, UserFollower)=
(SELECT COUNT(CASE WHEN u1.Activated=0 THEN 1 END),
COUNT(CASE WHEN u1.Activated=1 THEN 1 END)
FROM (SELECT * FROM users) as u1
WHERE u1.ReferralID=users.UserID);