UPDATE — 替換表中列/字段的數(shù)值
語法
UPDATE table SET col = expression [, ...]
[ FROM fromlist ]
[ WHERE condition ]
輸入
- table
- 現(xiàn)存表的名稱.
- column
- 表 table中列/字段的名.
- expression
- 賦予列/字段的一個(gè)有效的值或表達(dá)式.
- fromlist
- Postgres 的一個(gè)非標(biāo)準(zhǔn)的擴(kuò)展,允許別的表中的列/字段出現(xiàn)在 WHERE條件里.
- condition
- 請(qǐng)參考 SELECT 語句獲得 WHERE 子句的進(jìn)一步描述.
輸出
- UPDATE#
- 成功的返回信息.#意味著更新的行數(shù).如果 # 等于 0 則沒有行被更新.
描述
UPDATE改變滿足條件的所有行的聲明了的列/字段的值。只有要更改的列/字段需要在語句中出現(xiàn).
數(shù)組引用使用與 SELECT里一樣的語法.也就是說,單個(gè)數(shù)組元素,數(shù)組元素的一個(gè)范圍或者是整個(gè)數(shù)組都可以用一個(gè)查詢語句更新.
要更改表,你必須對(duì)它有寫權(quán)限,同樣對(duì) WHERE條件里提到的任何表也要有讀權(quán)限
表warehousestorage
WarehouseID | Amount |
1 | 100 |
1 | 100 |
1 | 100 |
1 | 100 |
1 | 100 |
1 | 100 |
1 | 100 |
1 | 100 |
1 | 28 |
1 | 0 |
1 | 100 |
4 | 14788 |
4 | 100 |
4 | 100 |
4 | 100 |
4 | 100 |
4 | 100 |
4 | 100d |
1 | 100 |
表warehouse
WarehouseID | UsingCapacity |
1 | 1028 |
2 | 0 |
3 | 0 |
4 | 15388 |
5 | 0 |
表warehouse中的
UsingCapacity是表warehousestorage對(duì)應(yīng)項(xiàng)的累加值
SQL語句:
update warehouse set UsingCapacity = c.amount
from (select Sum(amount) as 'amount' , warehouseid fromwarehousestorage group by warehouseid) c, warehouse
where warehouse.warehouseid = c.warehouseid運(yùn)行后,統(tǒng)計(jì)值正確。不過又發(fā)現(xiàn)一個(gè)問題,因?yàn)楸?font face="宋體">warehousestorage累加后,只有2項(xiàng),而表warehouse有5項(xiàng)
,上述代碼只更新了WareHouseID=1,4的2項(xiàng),其他并沒有更新。
所以代碼需要修改:
update warehouse set UsingCapacity = d.amount
from
(
select wh.warehouseid, isnull(c.amount,0) as'amount' from
(select Sum(amount) as 'amount' , warehouseidfrom warehousestorage group by warehouseid) c right join warehousewh
on c.warehouseid = wh.warehouseid
) d,warehouse
where warehouse.warehouseid = d.warehouseid
修改后,可以正常更新其余的幾項(xiàng)。