最常用的update语法是:

1
2
UPDATE TABLE_NAME
SET column_name1 = VALUE WHRER column_name2 = VALUE

如果我的更新值Value是从一条select语句拿出来,而且有很多列的话,用这种语法就很麻烦

第一,要select出来放在临时变量上,有很多个很难保存。 第二,再将变量进行赋值。

列多起来非常麻烦,能不能像Insert那样,把整个Select语句的结果进行插入呢? 就好象下面::

1
2
3
INSERT INTO table1
(c1, c2, c3)
(SELECT v1, v2, v3 FROM table2)

答案是可以的,具体的语法如下:

1
2
3
4
5
6
UPDATE table1 alias
SET (column_name,column_name ) = (
SELECT (column_name, column_name)
FROM table2
WHERE column_name = alias.column_name)
WHERE column_name = VALUE

下面是这样一个例子: 两个表a、b,想使b中的memo字段值等于a表中对应id的name值 表a:

1
2
3
4
id    name
1     王
2     李
3     张

表b:

1
2
3
4
id    ClientName
1
2
3

(MS SQL Server)语句:

1
UPDATE b   SET   ClientName    = a.name    FROM a,b    WHERE a.id = b.id

(Oralce)语句:

1
UPDATE b   SET   (ClientName)    =   (SELECT name FROM a WHERE b.id = a.id)

update set from 语句格式 当where和set都需要关联一个表进行查询时,整个update执行时,就需要对被关联的表进行两次扫描,显然效率比较低。

对于这种情况,Sybase和SQL SERVER的解决办法是使用UPDATE…SET…FROM…WHERE…的语法,实际上就是从源表获取更新数据。

在 SQL 中,表连接(left join、right join、inner join 等)常常用于 select 语句。 其实在 SQL 语法中,这些连接也是可以用于 update 和 delete 语句的,在这些语句中使用 join 还常常得到事半功倍的效果。

1
2
UPDATE T_OrderForm SET T_OrderForm.SellerID =B.L_TUserID
FROM T_OrderForm A LEFT JOIN T_ProductInfo   B ON B.L_ID=A.ProductID

用来同步两个表的数据!

Oralce和DB2都支持的语法:

1
UPDATE A SET (A1, A2, A3) = (SELECT B1, B2, B3 FROM B WHERE A.ID = B.ID)

MS SQL Server不支持这样的语法,相对应的写法为:

1
UPDATE A  SET A1 = B1, A2 = B2, A3 = B3  FROM A LEFT JOIN B ON A.ID = B.ID

个人感觉MS SQL Server的Update语法功能更为强大。MS SQL SERVER的写法:

1
UPDATE A SET A1 = B1, A2 = B2, A3 = B3 FROM A, B WHERE A.ID = B.ID

在Oracle和DB2中的写法就比较麻烦了,如下:

1
2
UPDATE A SET (A1, A2, A3) = (SELECT B1, B2, B3 FROM B WHERE A.ID = B.ID)
WHERE ID IN (SELECT B.ID FROM B WHERE A.ID = B.ID)

转载于:https://www.cnblogs.com/brightgalaxy/p/8875270.html

【转载】SQL update select结合语句详解及应用相关推荐

  1. SQL update select结合语句详解及应用

    SQL update select语句 最常用的update语法是: 1 2 UPDATETABLE_NAME SET column_name1 =VALUE WHRER column_name2 = ...

  2. SQL Server exec动态语句详解

    之前在项目中偶尔看到exec动态语句,所以在网上找了一些资料,整理总结一下,还有在自己项目中使用的时候遇到的坑. exec语句的格式 SQL语句写在括号里面 exec('select * from t ...

  3. iif能用到mysql中吗_数据库基础知识:SQL中的IIF语句详解

    IIf 返回由逻辑测试确定的两个数值或字符串值之一. 语法 数字 IIf(Logical EXPression, Numeric Expression1, Numeric Expression2) 如 ...

  4. sql中的iif语句详解

    IIf   返回由逻辑测试确定的两个数值或字符串值之一.          语法      数字     IIf(«Logical   Expression»,   «Numeric   Expres ...

  5. mysql iif函数_sql中的iif语句详解_mysql

    IIf 返回由逻辑测试确定的两个数值或字符串值之一. 语法 数字 IIf(«Logical Expression», «Numeric Expression1», «Numeric Expressio ...

  6. SQL语句 SELECT LIKE用法详解

    在SQL结构化查询语言中,LIKE语句有着至关重要的作用. LIKE语句的语法格式是:select * from 表名 where 字段名 like 对应值(子串),它主要是针对字符型字段的,它的作用 ...

  7. mysql切换用户sql语句,MySQL用户管理及SQL语句详解

    [(none)]>select user,host frommysql.user; #查询用户和主机+---------------+-----------+ | user | host | + ...

  8. MyBatis SQL语句详解

    MyBatis SQL语句详解 1 CRUD标签 1.1 select 1.2 insert 1.3 update 1.4 delete 1.5 #{ }和${ }的区别 2 动态SQL 2.1 if ...

  9. SQL语句详解(四)——SQL联表查询

    今天我们继续给大家介绍MySQL相关知识,本文主要内容是SQL联表查询. 一.SQL联表查询简介 在前文SQL语句详解(三)--SQL子查询中,我们给大家介绍了SQL子查询的相关知识和使用示例.实际上 ...

最新文章

  1. AttributeError: ‘NoneType‘ object has no attribute ‘group‘
  2. php mysql study_phpStudy 升级 MySQL5.7
  3. 如何重新安装TCP/IP协议
  4. C/C++使用socket实现server和client
  5. Python中必知的知识点:文本转义及编码的常用方法
  6. 【清单】值得「等待」的12个指示加载状态的 js 库
  7. 关于Java序列化你应该知道的一切
  8. 英特尔携手百度全方位深化合作 共筑智能生态
  9. centos7 配置http服务器
  10. 使用Microsoft SQL Server 2000全文搜索功能构建Web搜索应用程序 --作者:Andrew B. Cencini...
  11. Raki的统计学习方法笔记0x2章:感知机
  12. 医院耗材管理系统开发_7
  13. 软件测试之 app性能测试的指标
  14. 实战Java商品库存管理系统
  15. CAT扫盲:最常用的CAT翻译软件
  16. Layui 内置方法 - layer.style(重新定义层的样式)
  17. 我们算了笔账,月薪过万可能还不配结婚!
  18. 计算机原理探险系列(一)CPU
  19. 【mathtype】将公式左对齐(右对齐)
  20. 学渣的刷题之旅 leetcode刷题 67.二进制求和

热门文章

  1. android crop 大图,Android-CropView
  2. netty依赖_高性能:《一遍文章带你看懂 Netty世界》
  3. python标准库之socket_python标准库SocketServer学习
  4. 设计模式(三)--适配器模式
  5. oracle临时表读,Oracle之临时表详细解读
  6. bat for循环_bat教程[279] reg import命令的用法
  7. webpack打包jquery多页_Webpack打包与程序调试
  8. java统计行列和字数的函数_JAVA使用POI获取Excel的列数与行数
  9. 三菱gxworks3安装失败_三菱电梯nexway故障表
  10. oracle+connect+by+level,oracle connect by用法篇