[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 メーリングリストの案内