[pgsql-jp: 37483] Re: [LEFT JOIN]の結合で結果が表示されません

Toshihiro Kurai tkurai @ taiyo-st.co.jp
2006年 8月 25日 (金) 16:17:57 JST


こんにちは。倉井と申します。

カッコを使用されているので結合が
 (1)Aとb1
 (2)(1)の結果とb2
 (3)(2)の結果とb3
となったためであることと、その後のWHERE句での条件を
満たすようなレコードがないためではないでしょうか。

このような感じでどうでしょうか?

SELECT A.NO,A.NAME,b1.KINGAKU,b2.KINGAKU,b3.KINGAKU
  FROM A
  LEF JOIN B AS b1 ON A.NAME = b1.NAME AND b1.RAIREKI = 1
  LEF JOIN B AS b2 ON A.NAME = b2.NAME AND b1.RAIREKI = 2
  LEF JOIN B AS b3 ON A.NAME = b3.NAME AND b1.RAIREKI = 3
検証していないので、動くかはわかりませんが・・・。


> こんにちは。切明と申します。
> 
> [LEFT JOIN]を使用して左側のテーブルを中心にして右側のテーブルを持ってくると
> 思って以下のSQLを実行してみたのですが結果が1行も表示されません。
> ちなみにb2までにするとaaaのみ表示されます。これは右側のテーブルに該当がない
> 場合結果として持ってきていないためだと思われます。
> 自分が思っている結果を出すにはどのようにすればいいのでしょうか。
> 宜しくお願いします。
> 
> SELECT * FROM ((A 
> LEFT JOIN B as b1 ON A.NAME=b.NAME) 
> LEFT JOIN B as b2 ON A.NAME=b2.NAME) 
> LEFT JOIN B as b3 ON A.NAME=b3.NAME
> WHERE b1.RAUREKU=1 AND b2.RAIREKI=2 AND b3.RAIREKI=3;
> 
> ●テーブルA
> | NO | NAME |
> |   1| aaa  |
> |   2| bbb  |
> |   3| ccc  |
> |   4| ddd  |
> ・・・
> 
> ●テーブルB
> | NAME | RAIREKI | KINGAKU |
> | aaa  |  1      | 10000   |
> | aaa  |  2      | 12000   |
> | bbb  |  1      |  8000   |
> | ccc  |  1      | 12500   |
> ・・・
> 
> ●結果(理想)
> | NO | NAME | b1.KINGAKU | b2.KINGAKU | b3.KINGAKU |
> |   1| aaa  |   10000    |   12000    |            |
> |   2| bbb  |    8000    |            |            |
> |   3| ccc  |   12500    |            |            |
> |   4| ddd  |            |            |            |
> ・・・



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