プロが教える店舗&オフィスのセキュリティ対策術

■環境
・MySQL

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

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

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

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

A 回答 (3件)

私が思いついたのは、結合して 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
    • good
    • 1
この回答へのお礼

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

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

お礼日時:2013/10/06 09:40

先に全体のSQL文を書いたけど、あちこちに別名を使っています。


集計関数CountにもB_countと付けてます。予約語と同じはイヤなので。
    • good
    • 0
この回答へのお礼

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

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

お礼日時:2013/10/06 09:44

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
;
    • good
    • 0
この回答へのお礼

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

お礼日時:2013/10/06 09:41

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す