更新一个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; 
+0

它的工作很好只是一个小问题,“如果上面的语句是错误的,我想恢复标志为0即:[set u.'7dexpn' = uu.cnt; ELSE set u.'dexdexn = 0;]它不工作对我来说,我希望你能解决这个问题 –

+0

@GoargeGo ...你应该问更多的问题作为一个新的问题,而不是作为一个评论 –

+0

好吧,,,,这里我们去http://*.com/questions/40993308 /更新酮MySQL的表值基于-ON-另一个逐ID匹配与 - 条件 –

您可以使用聚合值

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` 
+0

我试过,但还是没有得到成功 –

+0

是什么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 –

+0

@ 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 
+0

我期待更新“用户”表请编辑,所以我尝试 –

+0

我编辑但它仍然不工作 –

+0

我正在更新我的答案。请尝试,现在希望它应该工作。 – Faisal

我做到了成功做这样的方式欢呼社区

$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 
";