[pgsql-jp: 32456] Re: Ver7.4の問合せ文でエラー

Shuichi_Tamura @ njs.co.jp Shuichi_Tamura @ njs.co.jp
2004年 3月 11日 (木) 18:30:04 JST



送信者:   Shuichi Tamura @ DOMNJS





申し訳有りません。題名が抜けていました。
再送します。


初めて投稿させて頂きます。
NJSの田村と申します。
今後ともよろしくお願いします。

早速ですが,PostgreSQLのバージョンを7.4に上げたところ,問合せ文
でエラーが発生するようになりました。

環境は以下です。
 Red Hat Linux7.3
 PostgreSQL7.4.1

エラーが発生する問合せとは,あるテーブルに,2つのテーブルをUNION
句で統合した副問合せ結果を自然外部結合(NATURAL LEFT JOIN)した
ものをGROUP句でグルーピングした場合です。

言葉では伝わりにくいので例を挙げて説明します。
以下のように3つのテーブル「商品」,「売上A」,「売上B」がある
とします。

test=> select * from 商品;
 id | name
----+------
  1 | 果物
  2 | 野菜
  3 | 肉
  4 | 魚

test=> select * from 売上A;
 id | subid | value
----+-------+-------
  1 |     1 |   100
  1 |     2 |   150
  2 |     1 |   200
  2 |     2 |   250
(4 rows)

test=> select * from 売上B;
 id | subid | value
----+-------+-------
  2 |     1 |   300
  2 |     3 |   350
  3 |     2 |   400
  3 |     3 |   450
(4 rows)

これらテーブルに対し,以下のクエリーを実行します。

mabi=> SELECT name,SUM(value)
    FROM 商品
    NATURAL LEFT JOIN
   (SELECT id,subid,value
      FROM 売上A
     UNION ALL
    SELECT id,subid,value
      FROM 売上B) AS 合計
   GROUP BY id,name
   ORDER BY id;

すると,以下のエラーが返ってきます。

ERROR:  column "商品.id" must appear in the GROUP BY clause or be used in
an aggregate function

バージョン7.3では正常に以下の結果が返ってきます。

 name | sum
------+------
 果物 |  250
 野菜 | 1100
 肉   |  850
 魚   |
(4 rows)

メッセージに従って「商品.id」でグルーピングすると正常に上記の結果を
返しますが,逆にバージョン7.3においてエラーとなります。

なぜ,自然結合(NATURAL JOIN)なのにテーブル名(商品.)を指定する
必要があるのでしょうか?
ちなみに外部結合(NATURAL LEFT JOIN)を内部結合(NATURAL JOIN)に
変更すると,エラーは出ません。(結果は同じではありませんが・・・)

同様の現象で悩まれた方,解決された方,間違いに気づいた方などおりまし
たら,情報提供願います。
よろしくお願いします。

#=================================================#
  日本上下水道設計(株)技術開発一部
    田村 周一 <Shuichi_Tamura @ njs.co.jp>
               TEL : 03-5269-9919
               FAX : 03-5269-9928
#=================================================#






pgsql-jp メーリングリストの案内