站內搜尋:Yahoo搜尋如果沒有給完整的網址,請在站內再搜尋一次!

2013-10-13

SQL語法:在Update命令裡面使用Select的結果,作為更新資料的條件

有一些情況要更新某一資料表的資料,選取所要更新資料的條件來源,並不是在同一資料表內,要如何讓這個更新的動作在單一SQL語法下完成呢?簡單的說,就是在Update命命中,使用次查詢(子查詢),來進行資料的更新。舉例說明如下:
  1. 資料表VendorProducts,是某家公司用來管理供貨廠商(VendorID)產品代號(ProductVen),和自己公司對應的產品代號(ProductID)的對應表。
  2. 資料表Products,是這家公司管理各項產品(ProductID)的資料表,由哪家供應商(VendorID)提供,進貨的價格(PriceV)多少?公告的售價(ListPrice)?最近是甚麼時候有更新過(LastUpdate)?
  3. 日前這家公司接到來自供應商V2的通知(Vendor=V2),該供應商所有X開頭的產品,將一律漲價20元,該公司的公告價格,將已漲價後的廠商供應價*1.5,作為新的公告售價,該如何完成這個些漲價產品的資料更新呢?
  4. 可以使用以下SQL語法來快速達成這個任務:
    update Products
      set PriceV=PriceV+20,ListPrice=(PriceV+20)*1.5,LastUpdate=GETDATE()
      where ProductID in
      (select ProductID from VendorProducts where VendorID='V2' and ProductVen like 'X%')
  5. 也可以把上述update條件的語法,改寫為Join的方式來下條件:
    update Products
      set PriceV=PriceV+20,ListPrice=(PriceV+20)*1.5, LastUpdate=GETDATE()
      from Products,VendorProducts
      where Products.VendorID=VendorProducts.VendorID and 
            Products.VendorID='V2' and VendorProducts.ProductVen like 'X%'

沒有留言:

張貼留言