`
mowengaobo
  • 浏览: 161564 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

关于update set from,第一次碰到,汗!

阅读更多

下面是这样一个例子:

两个表a、b,想使b中的memo字段值等于a表中对应id的name值  
  表a:id,name  
            1       王  
            2       李  
            3       张  
  表b:id,ClientName   
            1        
            2  
            3  
(MS SQL Server)语句:update   b  set   ClientName   =   a.name   from   a,b   where   a.id   =   b.id  

(Oralce)语句: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 还常常得到事半功倍的效果。

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都支持的语法:

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

MS SQL Server不支持这样的语法,相对应的写法为:
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的写法:
UPDATE  A  SET  A1  =  B1, A2  =  B2, A3 = B3 FROM  A, B  WHERE  A.ID  =  B.ID

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

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)

 

分享到:
评论

相关推荐

    sql经典语句一部分

    3),例如:在一个外部表中导入数据,由于某些原因第一次只导入了一部分,但很难判断具体位置,这样只有在下一次全部导入,这样也就产生好多重复的字段,怎样删除重复字段 alter table tablename --添加一个自增列 add...

    数据库操作语句大全(sql)

    3),例如:在一个外部表中导入数据,由于某些原因第一次只导入了一部分,但很难判断具体位置,这样只有在下一次全部导入,这样也就产生好多重复的字段,怎样删除重复字段 alter table tablename --添加一个自增列 ...

    经典SQL语句大全

    3),例如:在一个外部表中导入数据,由于某些原因第一次只导入了一部分,但很难判断具体位置,这样只有在下一次全部导入,这样也就产生好多重复的字段,怎样删除重复字段 alter table tablename --添加一个自增列 add...

    经典全面的SQL语句大全

     假如你想选出10条记录(也许是每次页面装载时的10条链接的列表),你可以用BETWEEN 或者数学等式选出第一条记录和适当数量的递增记录。这一操作可以通过好几种方式来完成,但是 SELECT 语句只显示一种可能(这里的...

    mysql数据库的基本操作语法

    注意:alter modify不支持一次修改多个列,但是Oracle支持多列修改 但是MySQL可以通过多个modify的方式完成: alter table user modify tel varchar(15) default '02087654321' first, modify name varchar(20) ...

    MySQL命令大全

    update User set Password=PASSWORD(‘newpassword’) where User=’root’; 如果要对用户所用的登录终端进行限制,可以更新User表中相应用户的Host字段,在进行了以上更改后应重新启动数据库服务,此时登录时可用...

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    第一章 Oracle入门 一、 数据库概述 数据库(Database)是按照数据结构来组织、存储和管理数据的仓库,它产生于距今五十年前。简单来说是本身可视为电子化的文件柜——存储电子文件的处所,用户可以对文件中的数据...

    MYSQL常用命令大全

    update User set Password=PASSWORD('newpassword') where User='root'; 如果要对用户所用的登录终端进行限制,可以更新User表中相应用户的Host字段,在进行了以上更改后应重新启动数据库服务,此时登录时可用如下...

    jdbc操作文档,数据库基本操作文档集合

    Instr:是否包含某字符,从第几个字符开始,第几次出现的位置。 Replace:用一个字符串替换另一个字符串中的字符 15.日期函数 sysdate:当前日期 months_between(日期值1,日期值2):求出给定日期范围的月数 add_...

    grub4dos-V0.4.6a-2017-02-04更新

    播放n次:序列图像各显示n次,时间独占。可作为启动前导、序幕。 永远重复:序列图像无限循环,时间与菜单共享。可作为菜单里的动画。 背景透明:即抠像。要求4角像素为背景色。 背景色最好为白色或黑色,这样...

    超实用sql语句

    3),例如:在一个外部表中导入数据,由于某些原因第一次只导入了一部分,但很难判断具体位置,这样只有在下一次全部导入,这样也就产生好多重复的字段,怎样删除重复字段 alter table tablename --添加一个自增列 add...

    ORM软件monalisa-orm.zip

    //第一次编写时,由于结果类还不存在, 为了保证能够编译正常, //函数的返回值 和 查询结果要用 泛值 替代, 保存后,插件会自动修改. //函数的返回值 和 查询结果 泛值的对应关系分三类如下: //1. List查询 //...

    Oracle事例

    update a set aa=null where aa is not null; delete from a where rowid!= (select max(rowid) from a b where a.aa=b.aa); 13、删除同其他表相同的行 delete from a where exits (select \'X\' from b ...

    精髓Oralcle讲课笔记

    61、select ename, sal from emp join (select max(sal) max_sal ,deptno from emp group by deptno) t on (emp.sal = t.max_sal and emp.deptno=t.deptno); --查询每个部门中工资最高的那个人 -----------------...

    Quartus_II使用教程

    第一次做波形仿真的时候有可能会遇到无法点选珊格, 需要自己小心意义,选满珊格,其实是没有勾选snap to grid。在工具栏倒数第二个键就是此 功能键,当然也可以在view里面选择,如图15. 图15 将一些类似的...

    2009达内SQL学习笔记

    rollback:回溯,回溯到上次操作前的状态,把这次事务操作作废,只有一次(DDL和DCL语句会自动提交,不能回溯)。 可以用commit语句提交,这样就回溯不回了。 set pause on\off :设置分屏(设置不分屏) set pause...

    SQL语法大全

    rs.absolutepage=N 将记录指针移到第N页的第一行 rs.pagesize=N 设置每页为N条记录 rs.pagecount 根据 pagesize 的设置返回总页数 rs.recordcount 返回记录总数 rs.bof 返回记录指针是否超出数据表首端,true表示是...

    orcale常用命令

    SQL>set view_name,text_length from user_views; SQL>set long 2000; 说明:可以根据视图的text_length值设定set long 的大小 SQL>select text from user_views where view_name=upper('&view_name'); 6、同义...

    最全的oracle常用命令大全.txt

    SQL>set view_name,text_length from user_views; SQL>set long 2000; 说明:可以根据视图的text_length值设定set long 的大小 SQL>select text from user_views where view_name=upper('&view_name'); 6、同义...

    arcgis工具

    在做外联如EXCEL等的时候对数据有一些要求,确保第一行包含字段名,这些字段名不能超过十个字母,不能出现特殊字符。最好把EXCEL保存为.csv文件去除一些不兼容的内容再连接。 转载ESRI论坛Lucy1114帖子说明: 12...

Global site tag (gtag.js) - Google Analytics