- ベストアンサー
1つのSQLにおいて、UNION結合テーブルからselectする際のエラー
いつもお世話になっております。Mysqlを利用しておりまして質問です。 現在、3つのテーブルを結合し、そこからさらにメンバー(mid)ごとにグループ化した上で、各々のポイント(p)の合計値とその合計値の順位(count( * ) +1)を取得しようと考え、以下のSQLをくみましたが、文法エラーが出てしまいます。 (#1064 - You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT ad_kahi AS kahi , ad_mid AS mid , ad_r AS r , ad_p AS p ) 結合をさらに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' AND sum( p ) >0 GROUP BY mid
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
副問合せの実装はMySQL 4.1からとのこと。質問者がお使いのversionはいくつですか。 http://okwave.jp/qa1783310.html
その他の回答 (2)
- dell_OK
- ベストアンサー率13% (766/5720)
私のテスト環境、サーバー、クライアントともにバージョン 5.0.51a では、実行可能でした。 ただし、ANo.1でご指摘の HAVING への変更は必要でしたのと、 「Every derived table must have its own alias」と言う別のエラーがでましたので、 ) と WHERE の間に a として別名を付加しました。 目に見える分には今回発生のエラーはでませんでした。 どこかに全角スペースが混じっていたりするとエラーにはなります。 内側の SELECT ad_kahi AS kahi, ad_mid AS mid, ad_r AS r, ad_p AS p FROM ad_log だけを実行したらエラーにはならないのでしょうか。
お礼
ご回答ありがとうございます。 全角スペース等も全部消して試みてみました。 やはり、バージョンの問題のようです。 >内側の SELECT ad_kahi AS kahi, ad_mid AS mid, ad_r AS r, ad_p AS p FROM ad_log だけを実行したらエラーにはならないのでしょうか。 これは全く問題でないです。 UNION allで3テーブルつながれた部分を取り出して実行しても問題ないです。 UNIONを使わないで3テーブル同様にあわせて、副問合せなしに同処理する方法を調べているところです。 大変参考になりました。ありがとうございました。
補足
質問内容がかわってきたため別の質問を立てさせていただきました。 http://okwave.jp/qa4193570.html ご回答いただきましてありがとうございました。
- jjon-com
- ベストアンサー率61% (1599/2592)
WHERE kahi = '0' AND sum( p ) >0 GROUP BY mid は MySQLかどうかに限定されず,SQLとして文法ミスです。 WHERE kahi = '0' GROUP BY mid HAVING sum( p ) > 0 と書き換えてください。次のページを参照のこと。 2-1.集計単位と集計関数 5-2.HAVING - GROUP BY後の条件指定 http://homepage1.nifty.com/rucio/main/VBdotNet/Database/Database9.htm
お礼
ご回答ありがとうございます。 早速参照ページを読み、なおして試してみました。 しかし、何も変わりません。SQLから返ってくる文法エラーの文も同様のものです。 SELECT ad_kahi AS kahi , ad_mid AS mid , ad_r AS r , ad_p AS p の近くを見てみてもどこが問題なのか検討がつきません。 申し訳ありませんが、他のご指摘ありましたらお待ちいたしております。
お礼
ご回答ありがとうございます。 サーバー・バージョンは チカッパ! MySQL 4.0.26-standard-log です。 まさに原因はそれのようです。 現在、SELECTとUNIONのカタマリを副問合せする方法を書き換えて、 副問合せ使わないで同じ処理ができるようにする方法を模索しているところです。 大変参考になりました。ありがとうございました。