2017-04-17 12 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; 

この質問は、ユーザのリストを受け取り、以下から取得したポストカウント... 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

ありがとう!私はこれを試しましたが、構文エラーが発生していますか?理由は分かりませんか? –

関連する問題