多表更新
在 mysql 3.23 中,你可以使用 limit # 來確保只有給定的記錄行數目被更改。
如果乙個 order by 子句被使用(從 mysql 4.0.0 開始支援),記錄行將以指定的次序被更新。這實際上只有連同 limit 一起才有用。
從 mysql 4.0.4 開始,你也可以執行乙個包含多個表的 update 的操作:
update items,month set items.price=month.price
where items.id=month.id;
注意:多表 update 不可以使用 order by 或 limit。
多表刪除
第乙個多表刪除格式從 mysql 4.0.0 開始被支援。第二個多表刪除格式從 mysql 4.0.2 開始被支援。
僅僅在 from 或 using 子句 之前 列出的表中的匹配記錄行被刪除。效果就是,你要以從多個表中同時刪
除記錄行,並且同樣可以有其它的表用於檢索。
在表名後的 .* 僅僅是為了相容 access:
delete t1,t2 from t1,t2,t3 where t1.id=t2.id and t2.id=t3.idor
delete from t1,t2 using t1,t2,t3 where t1.id=t2.id and t2.id=t3.id
在上面的情況下,我們僅僅從 t1 和 t2 表中刪除匹配的記錄行。
如果乙個 order by 子句被使用(從 mysql 4.0.0 開始支援), 記錄行將以指定的次序刪除。這實際上只有連同 limit 一起才有用。示例如下:
delete from somelog
where user = 'jcole'
order by timestamp
limit 1
這將刪除匹配 where 子句的,並且最早被插入(通過 timestamp 來確定)的記錄行。
delete 語句的limit rows 選項是 mysql 特有的,它告訴伺服器在控制權被返回到客戶端之前可被刪除的最大記
錄行數目。這可以用來確保乙個特定的 delete 命令不會占用太長的時間。你可以簡單地重複使用 delete 命令,直到被影響的記錄行數目小於 limit 值。
從 mysql 4.0 開始,在 delete 語句中可以指定多個表,用以從乙個表中刪除依賴於多表中的特殊情況
的記錄行。然而,在乙個多表刪除中,不能使用 order by 或 limit。
假設有兩個表,tab1,tab2,分別有產品名稱和產品**,現在我想用tab2的**替換tab1的**,我寫的語句是update tab1 set tab1.產品**=tab2.產品** where tab1.產品名稱=tab2.產品名稱
結果出現錯誤,提示為:列字首 'tab2' 與查詢中所用的表名或別名不匹配。請問應該怎樣寫,
sql語句是不支援多表同時更新的。
應該這樣寫
update tab1 set tab1.產品** = (select tab2.產品** from tab2 where tab2.產品名稱 = tab1.產品名稱) where tabl1.產品名稱 in (select tab2.產品名稱 from tab2)
後面的where tab1.產品名稱 in (select tab2.產品名稱 from tab2) 這句保證了如果tab1的產品在tab2沒有記錄時不會出錯。
在 開發中,資料庫來回換,而有些關鍵性的語法又各不相同,這是一件讓開發人員很頭痛的事情.本文總結了update語句更新多表時在sql server,oracle,mysql三種資料庫中的用法.我也試了sqlite資料庫,都沒成功,不知是不支援多表更新還是咋的.
在本例中:
我們要用表gdqlpj中的gqdltks,bztks欄位資料去更新landleveldata中的同欄位名的資料,條件是當landleveldata 中的geo_code字段值與gdqlpj中的lxqdm字段值相等時進行更新.
sql server語法:
update
set
| @variable = expression
| @variable = column = expression } [ ,...n ]
[ ,...n ] ]
[ where
< search_condition > ] } |
[ where current of
| cursor_variable_name }
] }
[ option ( < query_hint > [ ,...n ] ) ]
sql server示例:
update a
set a.gqdltks=b.gqdltks,a.bztks=b.bztks
from landleveldata a,gdqlpj b
where a.geo_code=b.lxqdm
oracle語法:
update updatedtable
set (col_name1[,col_name2...])=
(select col_name1,[,col_name2...]
from srctable [where where_definition])
oracel 示例:
update landleveldata a
set (a.gqdltks, a.bztks)=
(select b.gqdltks, b.bztks from gdqlpj b
where a.geo_code=b.lxqdm)
mysql語法:
update table_references
set col_name1=expr1 [, col_name2=expr2 ...]
[where where_definition]
mysql 示例:
update landleveldata a, gdqlpj b
set a.gqdltks= b.gqdltks,
a.bztks= b.bztks
where a.geo_code=b.lxqdm
Mysql也可以聯合多表更新和刪除
節選自mysql手冊 多表更新 在 mysql 3.23 中,你可以使用 limit 來確保只有給定的記錄行數目被更改。如果乙個 order by 子句被使用 從 mysql 4.0.0 開始支援 記錄行將以指定的次序被更新。這實際上只有連同 limit 一起才有用。從 mysql 4.0.4 開始...
MySQL更新和刪除
更新和刪除的操作sql語句比較簡單,不過要注意使用update的時候,要注意weher條件的限制,下面的語句是只更新id為10005的email位址,如果不加where語句限制,那麼將表中所有的email更新為 elmer fudd.com 刪除某個列的值,設定為null即可。刪除行的sql語句,使...
mysql批量更新 多表更新 多表刪除
mysql批量更新 多表更新 多表刪除 本節主要內容 mysql的批量更新 多表更新 多表刪除 一,批量更新 示例 update tepoi,pinf set tepoi.x pinf.fx,tepoi.y pinf.fy where tepoi.pid pinf.dmgis id and tepo...