2017-04-17 20 views
1

我创建了一个玩具数据集,我试图计算每个用户的帖子数。我似乎正在获取正确的计数值,但用户表中的计数列未使用值进行更新。MySQL - 左外连接不更新原始表

我是新来的MySQL和非常困惑!有人可以告诉我我做错了什么吗?

users: 
+---------+------+-------+ 
| user_id | user | pword | 
+---------+------+-------+ 
|  1 | Amy | abcd | 
|  2 | Jess | efgh | 
|  3 | Lori | ijkl | 
+---------+------+-------+ 

posts: 
+---------+-------------+------+ 
| post_id | post  | user | 
+---------+-------------+------+ 
|  1 | hi   | Lori | 
|  2 | hello  | Jess | 
|  3 | hello again | Jess | 
|  4 | and again | Jess | 
+---------+-------------+------+ 

mysql> ALTER TABLE users ADD COLUMN post_count INT; 
mysql> SELECT u.user_id, COUNT(p.user) AS post_count FROM users u LEFT JOIN posts p ON u.user LIKE p.user GROUP BY u.user_id; 
+---------+------------+ 
| user_id | post_count | 
+---------+------------+ 
|  1 |   0 | 
|  2 |   3 | 
|  3 |   1 | 
+---------+------------+ 

mysql> SELECT * FROM users; 
+---------+------+-------+------------+ 
| user_id | user | pword | post_count | 
+---------+------+-------+------------+ 
|  1 | Amy | abcd |  NULL | 
|  2 | Jess | efgh |  NULL | 
|  3 | Lori | ijkl |  NULL | 
+---------+------+-------+------------+ 

谢谢!!

+0

您需要使用更新语句来更新表格。发布您的更新查询。 – Kapil

+0

您必须有更新查询才能更新列 –

回答

1

请尝试以下...

UPDATE users 
JOIN (SELECT u.user_id AS user_id, 
       COUNT(p.user) AS post_count 
     FROM users u 
     LEFT JOIN posts p ON u.user LIKE p.user 
     GROUP BY u.user_id) postCountFinder 
    ON users.user_id = postCountFinder.user_id 
SET users.post_count = postCountFinder.post_count; 

这个问题需要你的用户列表,并从以下获得的帖子数...

SELECT u.user_id, 
     COUNT(p.user) AS post_count 
FROM users u 
LEFT JOIN posts p ON u.user LIKE p.user 
GROUP BY u.user_id; 

...并执行INNER JOINUsers共享值为user_id,从users的每一行创建一个数据集,并在最后添加相应的计数。

然后,我们使用SET命令将空post_countusers设置为其对应的连接计数。

如果您有任何问题或意见,请随时发布相应评论。

+0

张贴了轻微的更正。 – toonice

+0

添加说明。 – toonice

+0

耶!谢谢!!这就像一个魅力:-)。谢谢你的好解释。 –

0

你需要更新语句更新新添加的column.Try值这样的:

Update usr 
set usr.post_count=tbl.post_count 
from users usr 
inner join 
(select u.user_id,COUNT(p.user) 
AS post_count FROM users u 
LEFT JOIN posts p ON u.user LIKE p.user GROUP BY u.user_id) tbl 
on tbl.user_id=usr.user_id 
+0

谢谢!我试过这个,但我得到一个语法错误?不知道为什么? –