質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

解決済

1回答

19201閲覧

外部キーで繋がったレコード数の取得

MasakazuFukami

総合スコア1869

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

0グッド

1クリップ

投稿2018/07/31 06:37

いつもお世話になっております。

今回はネストした(用語が正しくない気がする)テーブルで対象のレコードの数を取得したいです。

構成としては以下の3つのテーブルがあり、外部キーで他のテーブルを参照できるようにしています。

  • usersテーブル
  • postsテーブル(posts.user_id => users.id)
  • imagesテーブル(images.post_id => posts.id)

このときに、usersが何件imagesを登録しているかをsqlで取得したいです。

usersが投稿しているpostsの数を出すことは以下で出来ました。

sql

1select u.name, count(*) 2from users as u 3inner join posts as p on p.user_id = u.id 4group by p.user_id

しかし、その下の階層のデータを取得する場合のやり方はわかりません。

最終的なゴールは、以下のように表示させたいです。

user_idnum_images
121
2111
32
41299

よろしくお願いいたします。。。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Orlofsky

2018/07/31 06:43

質問にお使いのテーブルのPRIMARY KEYと外部キーの列の部分で良いから、CREATE TABLE文も載せてください。また、数件ずつで良いからINSERT文も載せては?
yambejp

2018/07/31 07:27

具体的なサンプルデータをcreate table 、insert intoで提示して、どういう結果がほしいか具体的なロジックを指示ください
hihijiji

2018/07/31 08:12

パッと見ですが、INNER JOIN をもう一行増やすだけでは?
MasakazuFukami

2018/07/31 08:36

すいません。その辺配慮が足りてませんでしたね...以後注意いたします!
guest

回答1

0

ベストアンサー

あまり難しく考えずに、結合するテーブルを増やせば良いです。
但し、全てのuserに対しての件数を求めるなら外部結合する必要があり、また、カウントすべきものを厳密に指定する必要があります。

SQL

1select u.name, count(i.id) 2from users as u 3 left join posts as p on p.user_id = u.id 4 left join images as i on i.post_id = p.id 5group by p.user_id

投稿2018/07/31 08:29

編集2018/07/31 08:31
sazi

総合スコア25173

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

MasakazuFukami

2018/07/31 08:36

ありがとうございます!!! こちらで実現できました!!!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問