SQL(InterBase)について

解決


うちの  2005-08-11 04:28:47  No: 16969

初めまして。いきなりですが質問させていただきます。
  Delphi6+InterBase6で業務アプリケーションを作り、1年前から稼動しています。先日、試験用サーバーにInterBase7(サーバ)をインストールし、現在の業務が
正常に動作するか試してみたのですが、SQL文を発行するところでエラーになる
部分がありました。現行InterBase6にも同じSQL文を発行して詳しく調べてみたところ、どうもInterBaseの集合関数の結果がおかしいようでした。
  例えば、現行InterBase6では
    SELECT SUM(a),SUM(b) FROM ZDB
というSELECT文を発行したところ、
      F_1     F_2
    -----------------
       55      60
という結果が返ってくるのです。しかし、試験用InterBase7では
      SUM     SUM1
    -----------------
       55       60
となります。項目名が違うので、エラーが出るのはあたりまえでした!
ネットなどで調べたところ、どうも後者の結果(SUM,SUM1…)のほうが
正しいようでした。何かInterBaseの設定を知らないうちにいじって
しまったのか、関数「SUM」と「AVG」だけ、結果の項目名が「F_1,F_2…」と
なってしまうようです。それが正しいと思っていたので、なんとか元の結果が
出るようにしたいのですが、どなたか同様の現象で悩んだ方、いらっしゃいませんか?


AY  2005-08-11 05:09:41  No: 16970

うちのさん  こんにちは。
明確に  項目名をつける癖をつけられれば  回避できることだと思います。
F_1  F_2でほしいのであれば、
SELECT SUM(a) as F_1,SUM(b) as F_2 FROM ZDB
とすれば如何でしょう?
PS.
インターベースは触ったこないので  未検証ですが


うちの  2005-08-11 06:33:00  No: 16971

AYさん、素早いレスありがとうございます。
なるほど、そうやって as でエイリアス名をつけられるのですね。
しかし、asを使わずに、逆の(おそらく標準であると思われる)「SUM,SUM1…」という
結果が得たいのです。これは、SQL構文の話ではなく、InterBaseの
設定如何ではないかと思うのです。
InterBase6,InterBase7どちらのIBConsoleで同じSQL文発行しても、
違う結果が返ってくるというのは、今後開発する上でも原因を知って
おかなければならないと思いますので…。


HOta  2005-08-11 16:08:50  No: 16972

集合関数を使って、暗示的に得られる項目名は、それぞれ変わってきます。
Aliasを使うのが正しいSQLの構文になります。もしくは項目番号で扱うことになります。


AY  2005-08-11 21:22:08  No: 16973

>InterBase6,InterBase7どちらのIBConsoleで同じSQL文発行しても、
>違う結果が返ってくるというのは、今後開発する上でも原因を知って
>おかなければならないと思いますので…。
結果は同じですよね、列名を指定していないために暗黙についた名称の
原因を探る事に  意味は無いと思いますが・・
DBが変われば全く違いますし、今回のようにバージョンでも起き得るかもしれませんし・・


うちの  2005-08-12 05:49:45  No: 16974

HOtaさん、AYさん、ありがとうございます。
エイリアス名をつけるのが正しいんですね。
今後そのように致します。
何しろ独学で手探り手探りプログラムを組んでいるものですから、
正しい構文が書けてなかったみたいです。

どうもありがとうございました。
<< 解決 >>


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加