- 締切済み
SQLでの行の交換の仕方について質問です。
SQLで、UPDATE文を使って行を交換したいのですが、例えばこのようなテーブルがあった時 No Name Qty -- ----- ----- 1 皿 10 2 串 20 3 本 30 No1とNo2のQtyを入れ替えたいとき、Tmpのような所に一旦退避させて交換するような 方法以外で、入れ替える方法はありますか?
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- 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 句は不要です。
- 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)