[pgsql-jp: 37140] 結合時に複数の中から特定のレコードの最大値を持ってくるには(Bが無い場合も含める)

切明 裕次 y-kiriaki @ tec.co.jp
2006年 6月 2日 (金) 15:10:26 JST


こんにちは。切明と申します。
先日、”結合時に複数の中から特定のレコードの最大値を持ってくるには”で高橋様
にお世話になった
のですが、またまた問題が出てきてしまいました。
前回と同じ内容なのですが、テーブルAにあってテーブルBに無いデータがある場合で
す。
教えていただいたとおり実行すると、”ddd”が結果として出てきません。
そこで、”inner join”を”left join”に変更してみましたが、今度は”aaa”の結
果が複数出てしまいます。

どなたか出来る方法をお知りでしたらご教授願えないでしょうか。
お手数ですが宜しくお願いします。

○変更したselect文
select A.NO, A.NAME, B.KINGAKU  from (A
 left join B on A.NAME=B.NAME)
 left join ( select name, max( RAIREKI) as RAIREKI from B group by name )
as T1
    on T1.NAME = B.NAME and T1.RAIREKI = B.RAIREKI
○結果(実際)
| NO | NAME | KINGAKU |
|    1| aaa     |  10000     |
|    1| aaa     |  12000     |
|    2| bbb     |   8000     |
|    3| ccc    |  12500     |
|    4| ddd    |               |
・・・

●テーブルA
| NO | NAME |
|     1| aaa    |
|     2| bbb    |
|     3| ccc   |
|     4| ddd   |
・・・

●テーブルB
| NAME | RAIREKI | KINGAKU |
| aaa     |  0         | 10000     |
| aaa     |  1         | 12000     |
| bbb     |  0         |   8000     |
| ccc    |  0         | 12500     |
・・・

●結果(理想)
| NO | NAME | KINGAKU |
|    1| aaa     |  12000     |
|    2| bbb     |   8000     |
|    3| ccc    |  12500     |
|    4| ddd    |               |
・・・



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