• 締切済み

SQLでの行の交換の仕方について質問です。

SQLで、UPDATE文を使って行を交換したいのですが、例えばこのようなテーブルがあった時 No Name Qty -- ----- ----- 1  皿 10 2  串 20 3  本 30 No1とNo2のQtyを入れ替えたいとき、Tmpのような所に一旦退避させて交換するような 方法以外で、入れ替える方法はありますか?

みんなの回答

  • root139
  • ベストアンサー率60% (488/809)
回答No.3

単一のSQLでやりたいなら、CASE式とスカラサブクエリの組合せでいけるのではないかと。 なお、手元に環境が無いので Oracle では未確認です。 UPDATE table_hoge SET Qty = CASE No WHEN 1 THEN (SELECT Qty FROM table_hoge WHERE No = 2) WHEN 2 THEN (SELECT Qty FROM table_hoge WHERE No = 1) ELSE Qty END WHERE No IN (1, 2); 性能などを気にしないなら、最後の WHERE 句は不要です。

参考URL:
http://www.geocities.jp/mickindex/database/db_case.html#LocalLink-update
  • yamada_g
  • ベストアンサー率68% (258/374)
回答No.2

ちょっと無理やり感がありますが、 update テーブル T1 set Qty = ( select Qty from テーブル T2 where T2.No = case T1.No when 1 then 2 when 2 then 1 else T1.No end ) where T1.No in (1, 2) ; こんなのとか。

  • maiko0318
  • ベストアンサー率21% (1483/6969)
回答No.1

1に2を加える(30,20) 1から2を引き2とする(30,10) 1から2を引き1とする(20,10)

関連するQ&A