- 締切済み
2つのテーブルからの抽出と件数取得
詳細な手順は以下なのですが、C_TBLにはデータが万件を想定して、早く処理ができるSQLのSELECT分を教えて欲しいのですが。 ※1回のSQLでできれば件数を把握したい。 (1)C_TBLの日付=2007のデータを抽出 (2)A_TBLの会社=cp1のデータのみ抽出 (3)A_TBLの会社(b11・b12毎)に、C_TBLの日付(月毎)で件数を取得 A_TBL B_TBL C_TBL A 会社 B 単価 C A B 数量 日付 a1 cp11 b1 10 c1 a1 b1 1 2007-10-01 a2 cp21 b2 20 c2 a3 b2 2 2007-11-01 a3 cp12 b3 10 c3 a1 b1 1 2007-10-10 a4 cp11 b4 30 c4 a2 b3 3 2007-10-01 a5 cp21 b5 20 c5 a1 b1 5 2007-11-01 ※A_TBLのA、B_TBLのB、C_TBLのCはPrimary_keyです。 上記処理はページ数を書き出す為の件数を取得しているだけなのですが、次に再度、表示件数分(LIMIT)だけ以下の処理を行う (1)上記のと同様 (2)上位と同様 (3)A_TBLの会社(b11・b12毎)に、C_TBLの日付(月毎)で表示件数分を抽出 (4)A_TBLの会社(b11・b12毎)に、C_TBLの日付(月毎)で、B_TBLの単価を参照して金額を算出し集計。 宜しくお願い致します。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- yambejp
- ベストアンサー率51% (3827/7415)
例と命題に不一致がありますので補足が必要です。 (2)の「A_TBLの会社=cp1」とはなんでしょうか?cp11ならありますが cp1は見当たりません。 (3)「A_TBLの会社(b11・b12毎)」も同様。b11やb12などのレコードは 見当たりません。 また質問の後半(「上記処理は」以降)は質問になっていませんが この部分については手順の説明であって回答する必要はないという 理解でよろしいのでしょうか? とりあえず今の情報からですと (1) SELECT COUNT(*) FROM `C_TBL` WHERE `日付` BETWEEN '2007-01-01' AND '2007-12-31' (2) SELECT COUNT(*) FROM `A_TBL` WHERE `会社`='cp1' (3)月単位での集計であれば、別フィールドを設定するか 別途月集計用のテーブルをつくると効率的だとおもいます。 今のままだと厳しいかも