こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

SELECT/別テーブルのレコード数も取得したい

■環境
・MySQL

■前提
・テーブルA … idカラム
・テーブルB … A_idカラム

■やりたいこと
・テーブルAデータを取得する際、テーブルAレコードに応じて、テーブルB「A_idカラム」の数(レコード数)も取得したい

■取得イメージ例
・テーブルA「全カラム」、「count」カラム
※「count」カラム … テーブルBにある「A_idカラム」の数

■知りたいこと
・どこにも存在しないこの「count」カラムはどうやって作成したら良いでしょうか?
・全体のSQL文

投稿日時 - 2013-10-05 09:20:26

QNo.8292372

暇なときに回答ください

質問者が選んだベストアンサー

私が思いついたのは、結合して GROUP BY を使う方法とSELECT句内のサブクエリを使う方法でした。
version 5.5.8 で確認しました。

■ 結合して GROUP BY を使う方法

SELECT a.id, COUNT(b.A_id) AS count
FROM table_a a
LEFT OUTER JOIN table_b b ON(a.id = b.A_id)
GROUP BY a.id;


■ SELECT句内のスカラサブクエリを使う方法

SELECT
id,
(SELECT COUNT(*) FROM table_b b WHERE a.id = b.A_id) AS count
FROM table_a a;

参考URL:http://gihyo.jp/dev/serial/01/sql_academy2/001003

投稿日時 - 2013-10-05 13:25:45

お礼

回答ありがとうございました。

何となく色々な書き方が出来るんだろうな、とは思っていたのですが、
実際に違うやり方で書かれたコードを確認することが出来たので、とても勉強になりましたー

投稿日時 - 2013-10-06 09:40:29

ANo.3

このQ&Aは役に立ちましたか?

10人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.2

先に全体のSQL文を書いたけど、あちこちに別名を使っています。
集計関数CountにもB_countと付けてます。予約語と同じはイヤなので。

投稿日時 - 2013-10-05 11:41:18

お礼

補足ありがとうございます。

>集計関数CountにもB_countと付けてます。予約語と同じはイヤなので
・確かに関数Countと被っていますね
・質問した時点では、全く気が付きませんでした
・参考になりましたー

投稿日時 - 2013-10-06 09:44:36

ANo.1

Select t1.*, t2.B_count
From テーブルA t1 left join
(
Select A_id, count(*) B_count from テーブルB
) t2
On t1.id = t2.A_id
;

投稿日時 - 2013-10-05 11:33:36

お礼

回答ありがとうございました。
参考になりましたー

投稿日時 - 2013-10-06 09:41:18

あなたにオススメの質問