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 ( ...
随机推荐
- redis_安装
前面几章内容简单介绍了NoSql的概念,以及NoSql的几种分类,本文开始后面开始学习KV数据库Redis. 一.Redis是什么? Redis:REmote DIctionary Server(远程 ...
- Redis_NoSql分布式数据库CAP原理
前文简单介绍了NoSql数据库的四大分类以及常用的数据库技术,本文简单介绍分布式数据库CAP原理. 一.传统的CAID是什么 1. A(Atomicity)原子性:事务里的所有操作要么全部做完,要么都 ...
- [jzyzoj2021]lca模板题
查找最近公共祖先...我也不知道这东西有什么用,在线写法,非常之慢.... 存代码 #include<cstdio> #include<iostream> #include&l ...
- 基于Java 生产者消费者模式(详细分析)
Java 生产者消费者模式详细分析 本文目录:1.等待.唤醒机制的原理2.Lock和Condition3.单生产者单消费者模式4.使用Lock和Condition实现单生产单消费模式5.多生产多消费模 ...
- bzoj1003 trans DP
最初的印象是网络流之类的东西,但好像不是. 想了一下,没什么思路,就网上看了一下,有人说是DP,然后就自己想DP的做法,最开始想的状态是:dp[n][s] 第n天走s这条路,前n天最小的代价,但发现路 ...
- C++ -- STL泛型编程(二)之set
set集合容器实现了红黑树的平衡二叉检索树的数据结构,在插入元素时候它会自动调整二叉树的排列,把元素放在适当的位置,以确保每个子树根节点的键值都大于左子树的所有节点的键值,而小于右子树的所有节点的键值 ...
- CodeM资格赛2
题目描述 组委会正在为美团点评CodeM大赛的决赛设计新赛制. 比赛有 n 个人参加(其中 n 为2的幂),每个参赛者根据资格赛和预赛.复赛的成绩,会有不同的积分.比赛采取锦标赛赛制,分轮次进行,设某 ...
- CountDownLatch CyclicBarrier Semaphore 比较
document CountDownLatch A synchronization aid that allows one or more threads to wait until a set of ...
- react-native-communications 电话、短信、邮件、浏览器
第一种方法:Linking:调用系统的电话.短信.邮件.浏览器等功能 Linking.canOpenURL(this.props.url).then(supported => { if (!su ...
- Spring JdbcTemplate batchUpdate() 实例
在某些情况下,可能需要将一批记录插入到数据库中.如果你对每条记录调用一个插件的方法,SQL语句将被重复编译,造成系统缓慢进行. 在上述情况下,你可以使用 JdbcTemplate BATCHUPDAT ...