更新一个MySQL表基于ID匹配另一个表中的值
我有下面这2个表:更新一个MySQL表基于ID匹配另一个表中的值
users:
id 7dexpn
=========== ==========
1 0
2 0
3 0
user_pages:
id user_id 7dexpf
========== =========== ==========
99 1 0
98 2 1
97 3 1
96 3 1
95 3 1
94 2 0
我想{的(7dexpf)标志user_pages骨料}插入到用户表(7dexpn)通过user_pages(USER_ID)与用户表(ID)匹配
预期结果应该是:
users:
id 7dexpn
=========== ==========
1 0
2 1
3 3
您想汇总user_pages
中的值,然后分配它们。我会做:
update users u join
(select user_id, count(*) as cnt
from user_pages
where `7dexpf` = 1
group by user_id
) uu
on uu.user_id = u.id
set u.`7dexpn` = uu.cnt;
您可以使用聚合值
update users u
join ( select user_id, sum(case when `7dexpf` =1 1 else 0 end) tot_7dexpf
from user_pages
group by user_id) t1 on t1.user_id = u.id
set u.`7dexpf` = t1tot_7dexpf
一个加入这个方式,我建议IO避免列的名称与数字或在这种情况下使用反引号例如,启动:
`7dexpf`
我试过,但还是没有得到成功 –
是什么tot_ 7dexpf&1否则为0结束在这里的作用?我认为应该看起来像这样的更新用户设置7dexpn 加入(select user_id,sum(case'when'7dexpf' = 1)tot_ 7dexpf from user_pages group by user_id)t1 on t1.user_id = u.id –
@ GoargeGo .. tot和7之间的错误空间.. ..答案更新.. – scaisEdge
使用下面的查询
尝试UPDATE users u,
(
SELECT
user_id,
SUM(7dexpf) AS 7dexpf
FROM
user_pages up
GROUP BY
user_id
) upp
SET 7dexpn = upp.7dexpf
WHERE
u.id = upp.user_id
我做到了成功做这样的方式欢呼社区
$query=" UPDATE users c
INNER JOIN (
SELECT user_id, SUM(7dexpf) as total
FROM user_pages
GROUP BY user_id
) x ON c.id = x.user_id
SET c.7dexpn = x.total
";
它的工作很好只是一个小问题,“如果上面的语句是错误的,我想恢复标志为0即:[set u.'7dexpn' = uu.cnt; ELSE set u.'dexdexn = 0;]它不工作对我来说,我希望你能解决这个问题 –
@GoargeGo ...你应该问更多的问题作为一个新的问题,而不是作为一个评论 –
好吧,,,,这里我们去http://stackoverflow.com/questions/40993308 /更新酮MySQL的表值基于-ON-另一个逐ID匹配与 - 条件 –