MySQL联合多表更新和删除
在 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。
结果出现错误,提示为:列前缀 '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联合多表更新和删除的更多相关文章
- MYSQL联合多表更新和删除(转)
		
文章转自http://www.cnblogs.com/andy_tigger/archive/2011/05/11/2043483.html 多表更新在 MySQL 3.23 中,你可以使用 LIMI ...
 - mysql用一个表更新另一个表的方法
		
Solution 1: 修改1列(navicate可行) update student s, city c set s.city_name = c.name where s.city_code = ...
 - mysql 去重,跨表更新,跨表删除
		
一.去重 1.查询出重复的记录 CREATE TABLE push_log_full_2013_10_30_tmp SELECT * FROM `push_log_full` WHERE time B ...
 - MySQL快速回顾:更新和删除操作
		
前提要述:参考书籍<MySQL必知必会> 6.1 更新数据 为了更新(修改)表中的数据,可使用UPDATE语句.可采用两种方式使用UPDATE: 更新表中特定的行: 更新表中所有的行. U ...
 - mysql中两表更新时产生的奇葩问题,产生死锁!
		
如下一个两表更新语句 UPDATE hzxm201610 a,xmhzylb1201610 b SET a.gk07_1_6=b.gk04_11,a.gk07_2_6=b.f06_1,a.gk07_3 ...
 - php分享(三十六)mysql中关联表更新
		
一:关联不同的表更新 1: 通过where关联更新 update student s, city c set s.province_name = c.province_name, s.city_nam ...
 - mysql联合其他表做更新
		
在sql server中,我们可是使用以下update语句对表进行更新: update a set a.xx= (select yy from b) where a.id = b.id ; 但是在my ...
 - MySQL在同一个表上,删除查询出来的结果
		
背景 有一个程序员员工表(code_user),包含用户id.姓名.掌握的语言. 表数据如下: +---------+-----------+----------+ | user_id | user_ ...
 - mySQL:两表更新(用一个表更新另一个表)的SQL语句
		
用一个表中的字段去更新另外一个表中的字段, MySQL 中有相应的 update 语句来支持,不过这个 update 语法有些特殊.看一个例子就明白了. create table student ( ...
 
随机推荐
- ddms 安卓录制
			
韩梦飞沙 韩亚飞 313134555@qq.com yue31313 han_meng_fei_sha 屏幕录制, 视频录制 保存为 . 打开 .显示在浏览器里. 设备屏幕捕捉 刷 ...
 - bzoj 5294: [Bjoi2018]二进制
			
Description pupil 发现对于一个十进制数,无论怎么将其的数字重新排列,均不影响其是不是333 的倍数.他想研究对于二进 制,是否也有类似的性质.于是他生成了一个长为n 的二进制串,希望 ...
 - 【最小表示法】BZOJ1398-寻找朋友
			
[题目大意] 判断两个字符串是否循环同构. [思路] 我一开始的做法是直接同时在两个字符串上求最小表示法,只有部分测试点能过,理由未知,以后再来思考. 现在做法:分别求出两个字符串的最小表示法,再比较 ...
 - Android Studio 2.3更换默认的ConstraintLayout布局
			
首先打开你的Android Sudio安装目录,我的为D:\Program Files\Android\Android Studio,进入到以下文件夹\plugins\android\lib\temp ...
 - c# -- 解决FromsAuthentication上下文不存在
			
使用 FormsAuthentication.HashPasswordForStoringInConfigFile("需要加密的字符串", "MD5")这个方法 ...
 - Android -- 工程目录解释
			
src:放置我们编写的源文件 gen:ADT帮助我们生成的,当项目使用资源时,会通过R.java引用资源文件(16进制,不可修改).每当资源发生变化都会重新编译R.java android x.x:我 ...
 - Fully Digital Implemented Delta-Sigma Analog to Digital Converter
			
http://www.design-reuse.com/articles/14886/fully-digital-implemented-delta-sigma-analog-to-digital-c ...
 - How to put a relative path for a DLL statically loaded?
			
How to put a relative path for a DLL statically loaded? I have a DLL made in Delphi 7/Windows XP tha ...
 - Si4355 低电流 Sub-GHz接收器
			
Silicon Labs 的 Si4355 是易于使用的.低电流.Sub-GHz EZRadio® 接收器.覆盖所有主要波段,结合了即插即用的简单性和需要处理各种不同应用的灵活性.紧凑的 3 mm x ...
 - MySQL在windows系统的安装
			
原文:https://blog.csdn.net/wokaowokaowokao12345/article/details/76736152 MySQL在windows系统的安装 原创 2017年08 ...