2017-04-17 58 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

謝謝!我試過這個,但我得到一個語法錯誤?不知道爲什麼? –