• ベストアンサー

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

■環境 ・MySQL ■前提 ・テーブルA … idカラム ・テーブルB … A_idカラム ■やりたいこと ・テーブルAデータを取得する際、テーブルAレコードに応じて、テーブルB「A_idカラム」の数(レコード数)も取得したい ■取得イメージ例 ・テーブルA「全カラム」、「count」カラム ※「count」カラム … テーブルBにある「A_idカラム」の数 ■知りたいこと ・どこにも存在しないこの「count」カラムはどうやって作成したら良いでしょうか? ・全体のSQL文

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

  • ベストアンサー
  • root139
  • ベストアンサー率60% (488/809)
回答No.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
re97
質問者

お礼

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

その他の回答 (2)

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.2

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

re97
質問者

お礼

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

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.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 ;

re97
質問者

お礼

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

関連するQ&A