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

根岸 智幸 tomoyu-n @ tokyo-cafe.com
2006年 3月 3日 (金) 20:17:35 JST


根岸です。

蛇足です。

> # UPDATE t1 SET f3=f3+1 where (f1) in (SELECT f1 FROM t2 WHERE
> f5='a02');

は、副問い合わせの使えないMySQL 4.0系は使えないないなー、 
と思いましたが、
「@変数」で解決できました。

mysql> select @f1:=f1, @ f2:=f2 from t2 where f5='a02';
+---------+---------+
| @f1:=f1 | @f2:=f2 |
+---------+---------+
|       1 |       3 |
+---------+---------+
1 row in set (0.27 sec)

mysql> update t1 set f3=10 where f1=@f1 and f2=@f2;
Query OK, 1 row affected (0.03 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> select * from t1;
+------+------+------+
| f1   | f2   | f3   |
+------+------+------+
|    1 |    2 |    0 |
|    1 |    3 |   10 |
|    2 |    2 |    2 |
|    2 |    3 |    3 |
+------+------+------+
4 rows in set (0.00 sec)

応用の効かない情報でゴメンナサイ。
MySQLって独特な世界だなー(ってほかにPostgreSQLしか知らな 
いのだけど)





On 2006/03/03, at 20:02, 河本陽一 wrote:

> こうもとです。
>
> Naoki.Kuniyoshi. さんの書いたこと:
>>  これだと、1件のみ対象で、それ以上はエラーになりません 
>> か?
>>  Oracleだとその場合、エラーになります。
>
>  PostgreSQLでは、対象が複数の場合でも大丈夫でした。
>
> # UPDATE t1 SET f3=f3+1 where (f1)=(SELECT f1 FROM t2 WHERE f5='a02');
> UPDATE 2
>
>>  そういう場合は、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 メーリングリストの案内