多表更新

在 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.id



or



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 特有的,它告诉server在控制权被返回到client之前可被删除的最大记录行数目。这能够用来确保一个特定的 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 

          { 

           table_name WITH ( < table_hint_limited > [ ...n ] ) 

           | view_name 

           | rowset_function_limited 

          } 

          SET 

          { column_name = { expression | DEFAULT | NULL } 

          | @variable = expression 

          | @variable = column = expression } [ ,...n ] 



      { { [ FROM { < table_source > } [ ,...n ] ] 



          [ WHERE 

              < search_condition > ] } 

          | 

          [ WHERE CURRENT OF 

          { { [ GLOBAL ] cursor_name } | 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联合多表更新和删除的更多相关文章

  1. MYSQL联合多表更新和删除(转)

    文章转自http://www.cnblogs.com/andy_tigger/archive/2011/05/11/2043483.html 多表更新在 MySQL 3.23 中,你可以使用 LIMI ...

  2. mysql用一个表更新另一个表的方法

    Solution 1:  修改1列(navicate可行) update student s, city c set s.city_name = c.name where s.city_code = ...

  3. mysql 去重,跨表更新,跨表删除

    一.去重 1.查询出重复的记录 CREATE TABLE push_log_full_2013_10_30_tmp SELECT * FROM `push_log_full` WHERE time B ...

  4. MySQL快速回顾:更新和删除操作

    前提要述:参考书籍<MySQL必知必会> 6.1 更新数据 为了更新(修改)表中的数据,可使用UPDATE语句.可采用两种方式使用UPDATE: 更新表中特定的行: 更新表中所有的行. U ...

  5. mysql中两表更新时产生的奇葩问题,产生死锁!

    如下一个两表更新语句 UPDATE hzxm201610 a,xmhzylb1201610 b SET a.gk07_1_6=b.gk04_11,a.gk07_2_6=b.f06_1,a.gk07_3 ...

  6. php分享(三十六)mysql中关联表更新

    一:关联不同的表更新 1: 通过where关联更新 update student s, city c set s.province_name = c.province_name, s.city_nam ...

  7. mysql联合其他表做更新

    在sql server中,我们可是使用以下update语句对表进行更新: update a set a.xx= (select yy from b) where a.id = b.id ; 但是在my ...

  8. MySQL在同一个表上,删除查询出来的结果

    背景 有一个程序员员工表(code_user),包含用户id.姓名.掌握的语言. 表数据如下: +---------+-----------+----------+ | user_id | user_ ...

  9. mySQL:两表更新(用一个表更新另一个表)的SQL语句

    用一个表中的字段去更新另外一个表中的字段, MySQL 中有相应的 update 语句来支持,不过这个 update 语法有些特殊.看一个例子就明白了. create table student ( ...

随机推荐

  1. [NOI2009]诗人小G --- DP + 决策单调性

    [NOI2009]诗人小G 题目描述: 小G是一个出色的诗人,经常作诗自娱自乐. 但是,他一直被一件事情所困扰,那就是诗的排版问题. 一首诗包含了若干个句子,对于一些连续的短句,可以将它们用空格隔开并 ...

  2. 所以学树分块的时候为什么要看vector啊sjb

    明明应该拼命刷题却悠哉补着vector和指针 -------------------------------------------------------------------题记 http:// ...

  3. BZOJ3238 [Ahoi2013]差异 SA+单调栈

    题面 戳这里 题解 考虑把要求的那个东西拆开算,前面一个东西像想怎么算怎么算,后面那个东西在建出\(height\)数组后相当于是求所有区间\(min\)的和*2,单调栈维护一波即可. #includ ...

  4. java开发_数字转换汉语中人民币的大写_完整版

    做这个应用,源于突然的一个想法:看到发票上面的数字要转换成汉语中人民币的大写 于是就有了下面的这些事儿..... 先看看运行效果: ================================== ...

  5. 人脸对齐SDM原理----Supervised Descent Method and its Applications to Face Alignment

    最近组里研究了SDM算法在人脸对齐中的应用,是CMU的论文<Supervised Descent Method and its Applications to Face Alignment> ...

  6. YII 关联查询

    通过外键自己关联自己

  7. TortoiseSVN里锁lock 的使用方法

    刚才试验了一下,终于搞明白了TortoiseSVN里锁lock 的使用方法. 简单的说,如果压根没有锁lock,那么每个人都拥有一个本地copy,每个人都能自由地对本地copy编辑edit并提交com ...

  8. InvalidateRect()与Invalidate()的用法(转)

    BOOL InvalidateRect(   HWND hWnd,           // 窗口句柄   CONST RECT* lpRect,   // 矩形区域   BOOL bErase    ...

  9. 'NSUnknownKeyException', reason:....etValue:forUndefinedKey:]: this class is not key value coding-compliant for the key

    erminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<MainTableViewControl ...

  10. [转]远程注入DLL : 取得句柄的令牌 OpenProcessToken()

    http://hi.baidu.com/43755979/blog/item/3ac19711ea01bdc4a6ef3f6a.html 要对一个任意进程(包括系统安全进程和服务进程)进行指定了写相关 ...