
http://okwave.jp/qa4191021.html
こちらで質問させていただきましたが、新しく解決できない問題ができたので、再度別の質問を立てさせていただきます。
現在、以下のUNIONを入れ子になったSELECT文があります。
-----------------------------------------------------
SELECT sum( p ) , count( * ) +1 AS jyuni
FROM
(
SELECT ad_kahi AS kahi, ad_mid AS mid, ad_r AS r, ad_p AS p
FROM ad_log
UNION ALL
SELECT g_kahi AS kahi, g_mid AS mid, g_r AS r, g_p AS p
FROM game_log
UNION ALL
SELECT b_kahi AS kahi, b_mid AS mid, b_r AS r, b_p AS p
FROM bazz_log
)
WHERE kahi = '0'
GROUP BY mid
HAVING sum( p ) > 0
------------------------------------------------
しかし、MySQLのバージョンの問題(MySQL 4.0.26)で、サブクエリを使うことができません。
そこで、同じ処理を副問合せを使わない形でできるようにする方法をご存知の方、いらっしゃいましたらご教示頂ければ幸いでございます。
ちなみに、一時テーブルを作る方法は考えました。
しかし、このスクリプトはWEBアプリの一部で実行・更新頻度が多く、多いときは1回につき数万行を処理することになるという事情がありまして、できるだけ軽く処理ができる方法が他にあればと考えております。
何卒よろしくお願い申し上げます。
No.3ベストアンサー
- 回答日時:
>→現状はまだデータ未登録の状態です。
もしそうなら、1つのテーブルで管理するように構造をかえればすむのでは?
データの種別を記録するフィールドを1個つくれば、3つテーブルがある
のとおなじような効果は得られますし
御礼遅くなってしまい申し訳ありません。
>もしそうなら、1つのテーブルで管理するように構造をかえればすむのでは?
実際のテーブルはもっとカラムが多く複雑なため、あえてテーブルを分けて設計しております。
結局、もう1つの一時テーブルにそれぞれの集計値を書き出してから集計するようにしました。
ありがとうございました。
No.2
- 回答日時:
一時テーブルを使うしかないでしょうから・・・
(1)3回集計してそれぞれを一時テーブルにinsertしておき、その結果を
もう一度集計する
(2)集計せずに一時テーブルにinsertしてしまい、一度だけ集計する
の両方テストして、早いほうを採用するというのが妥当かと。
No.1
- 回答日時:
継続した質問は、ここでは「前の質問を締めてから行う」のがルールですよ?
>ちなみに、一時テーブルを作る方法は考えました。
>実行・更新頻度が多く、多いときは1回につき数万行を処理することになるという
>事情がありまして、できるだけ軽く処理ができる方法が他にあれば
提示されたSQLは、「3表の全行をunionする」という操作で、元々、軽く処理できる
SQLになっていませんが?
母体データは何件くらいですか?
どの列が、頻繁に更新されるのですか?
どういうインデクスを付けていますか?
ご回答いただきまして、誠にありがとうございます。
>継続した質問は、ここでは「前の質問を締めてから行う」のがルールですよ?
→ご指摘ありがとうございます。
>提示されたSQLは、「3表の全行をunionする」という操作で、元々、軽く処理できるSQLになっていませんが?
→仰るとおり、そもそも重い処理です。
私の力量不足で一時テーブルを使う方法しか考え付かなかったため何かよい代替案がないものかと考え質問させていただきました。
>母体データは何件くらいですか?
>どの列が、頻繁に更新されるのですか?
→現状はまだデータ未登録の状態です。
更新と書いてしまいましたが、updateよりもinsertでの新規登録が主です。どの列にもデータは入ります。
3テーブルあわせて毎月3万件前後の新規登録があります。
上記SELECT文ではシンプルにするため省きましたが、今月分のみ抽出するよう条件付けます。毎月3万件を複数月分まとめて処理はしない予定です。
>どういうインデクスを付けていますか?
→インデクスについて調べはしたのですが、DBに冠する知識が圧倒的に不足しているため、まだどうつければいいのか放置している状態です。
全く初歩的な理解が足りない中なのですが、mid=会員ID、r=更新日時、 p=ポイントですが、group byなどするのは会員IDが多いため、midになるのかと考えています。
初歩的なレベルでわかりにくい質問にお答えいただきありがとうございます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- MySQL SQLです。下記の問合せを行うクエリを、PhpMyAdminで作成して実行せよ。 「昨年の各月の総降 1 2023/07/01 00:32
- MySQL うまくいきません教えてくださいお願いしますSQLです。クエリ構文です。 1 2023/07/07 12:39
- MySQL SQLです。こんな感じですか?あってますか? うまくいきません教えてくださいお願いします 1 2023/07/08 15:27
- Visual Basic(VBA) ExcelからAccessのテーブルに書き込む時に時間がかかる 1 2022/10/14 20:38
- Visual Basic(VBA) 【変更】ファイルを閉じてダイアログで保存した時、更新したシートだけの処理の実行をする 5 2022/03/26 18:31
- Excel(エクセル) エクセル VBA For Next 繰り返しの書き方を教えてください 6 2022/09/01 14:11
- Access(アクセス) アクセス 有効なフィールド名、または式として認識できませんのエラー 3 2022/08/19 11:53
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
- PostgreSQL SQLで検索結果の記事を表示したい 1 2022/04/28 21:03
- Visual Basic(VBA) あるフォルダーのファイルを違う親フォルダーのサブフォルダーに移したい 11 2023/02/15 19:00
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【SQL】他テーブルに含まれる値...
-
Access、教えてください。
-
SQLサーバに対するSQL文で抽出...
-
SQLで、Join句で結合したテ...
-
フィールド内のデータの増加に...
-
既存データをINSERT文にして出...
-
特定項目のデータを形態素解析...
-
一つの項目に2つのデータが含...
-
重複データを除いてカウントしたい
-
平均・分散
-
同じ構成のテーブルの条件付き結合
-
データベースについて(mysql)
-
MYSQL5.0 SQLについて...
-
データベース、テーブル設計に...
-
数種類のテーブルを結合させて...
-
同一テーブル内で違うフィール...
-
テーブルデーターの展開方法に...
-
一括置換のSQL文
-
副問合せを使わずにUNIONと同様...
-
複数の期間にマッチする人の抽...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【SQL】他テーブルに含まれる値...
-
SQLで、Join句で結合したテ...
-
Accessの構成をコピーしたい
-
既存データをINSERT文にして出...
-
同一テーブル内での比較(最新...
-
SQLサーバに対するSQL文で抽出...
-
副問合せを使わずにUNIONと同様...
-
結合したテーブルをSUMしたい
-
テーブル名が可変の場合のクエ...
-
PRIMARY KEYのコピー
-
2つのテーブルをLIKE演算子のよ...
-
ACCESSのVBAにてExcelに行...
-
DB2のSQLコマンドについて
-
Excelでしりとりを作る方法
-
ExcelのMatch関数のようなもの...
-
改行を含んだデータのインポート
-
ExcelのVLOOKUP関数の動作をMyS...
-
ADO+ODBCでテーブルに接続する...
-
データ無し時は空白行にしたい...
-
Access特定のテーブルを編集不...
おすすめ情報