[pgsql-jp: 36822] Re: WHEREにSELECTふたつ

ISHIDA Akio iakio @ mono-space.net
2006年 3月 3日 (金) 20:11:17 JST


石田です。

06/03/03 に 河本陽一<komoto.yoichi @ kcc.co.jp> さんは書きました:
> こうもとです。
>
> Naoki.Kuniyoshi. さんの書いたこと:
> > これだと、1件のみ対象で、それ以上はエラーになりませんか?
> > Oracleだとその場合、エラーになります。
>
>  PostgreSQLでは、対象が複数の場合でも大丈夫でした。
>
> # UPDATE t1 SET f3=f3+1 where (f1)=(SELECT f1 FROM t2 WHERE f5='a02');
> UPDATE 2

いや、kuniyoshi さんがおっしゃっているのは、
SELECT f1 FROM t2 WHERE f5='a02'
が複数の行を返すケースですよね。

確かに私もそこまでは考えていなかったのですが、
元のテーブル定義が f5 が unique なので、ギリギリセーフでした^^。

実際、f5 が unique でなく、サブクエリ内が複数行を返す
場合は、kuniyoshi さんのおっしゃるように
PostgreSQL でもエラーになりますし、その場合は in を使う
と解決できます。

>
> > そういう場合は、inを使えば対応できるかと。
> >
> > UPDATE t1 SET f3 = 10
> > WHERE (f1, f2) in (SELECT f1, f2 FROM t2 WHERE f5='a02');
>
>  PostgreSQLでも、動作しました。
>
> # UPDATE t1 SET f3=f3+1 where (f1) in (SELECT f1 FROM t2 WHERE
> f5='a02');
> UPDATE 2
>
> ======================================================================
> 河本陽一(こうもとよういち)
> mailto:komoto.yoichi @ kcc.co.jp
>
>



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