[pgsql-jp: 33341] 重複しているサブクエリーの省略

Watanabe Takehiro takk @ ntt-it.co.jp
2004年 6月 22日 (火) 17:31:47 JST


渡辺@ntt-itです

以下のSQL文の重複したサブクエリーをどうにかして一つにしてムダを省きたいのですが
やり方がわかりません。一つめのサブクエリーをテーブル全体にする方法も
あるのですが、データー量が100万行を超えているため現実的でないと考えています。
わかる方がいらっしゃいましたら、教えてください。

バージョンは PostgreSQL 7.3 on i686-pc-linux-gnu, compiled by GCC 2.96 です

select hoge3.d1,hoge3.d2,hoge3.name,hoge3,d3
from (select d1,d2,name,d3 from hoge where d2!=3) as hoge3
     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ,(select name,max(d3) from 
            (select d1,d2,name,d3 from hoge where d2!=3) as hoge1
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      group by name) as hoge2
where hoge3.name=hoge2.name and
      hoge3.d3=hoge2.d3;


select d1,d2,name,d3 from hoge where d2!=3 の結果
d1 d2 name d3
1  1  P1   10
1  2  P1   13
2  1  P1   12
2  2  P1   13
3  1  P2   13
3  2  P2   21
4  1  P2   23
4  2  P2   23

最終的に欲しい結果
d1 d2 name d3
1  2  P1   13
2  2  P1   13
4  1  P2   23
4  2  P2   23

よろしくお願いします。



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