2007年7月10日火曜日

UPDATEの中にSELECT文

スズキです。

UPDATE文でSELECT文使えるって、
最近、初めて知りました。

こんな感じです。

--------
UPDATE ITEM A SET STOCK = (
  SELECT A.STOCK - B.AMOUNT
  FROM CART B
  WHERE A.ITEM_ID = B.ITEM_ID
) WHERE EXISTS (
  SELECT 1
  FROM CART C
  WHERE A.ITEM_ID = B.ITEM_ID
)
--------

これは、商品テーブルのある商品の在庫を
カートテーブルのその商品の購入数でマイナスした形で、
アップデートすることを想定しています。

ポイントは、"WHERE EXISTS"ですね。
これがないとSELECT対象外のデータに、
NULLを挿入してしまいます。

SQL、深すぎ。

--
blog: http://suz-lab.blogspot.com/

0 コメント: