プロが教える店舗&オフィスのセキュリティ対策術

SQLで、UPDATE文を使って行を交換したいのですが、例えばこのようなテーブルがあった時

No Name Qty
-- ----- -----
1  皿 10
2  串 20
3  本 30

No1とNo2のQtyを入れ替えたいとき、Tmpのような所に一旦退避させて交換するような
方法以外で、入れ替える方法はありますか?

A 回答 (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_ca …
    • good
    • 0

ちょっと無理やり感がありますが、



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)
;

こんなのとか。
    • good
    • 0

1に2を加える(30,20)


1から2を引き2とする(30,10)
1から2を引き1とする(20,10)
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!