`
mowengaobo
  • 浏览: 166272 次
  • 性别: 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)

 

分享到:
评论

相关推荐

    数据库第一次实验.doc

    - 更新记录:使用`UPDATE`语句修改记录,例如`UPDATE employee SET department='4' WHERE id='020018'`。 4. 查询操作: - 基本查询:利用`SELECT`语句查询特定字段,如`SELECT name, address, phone FROM ...

    第四次作业1

    2. **数据插入(多列)**:`TEACHERS`表的插入语句`insert into TEACHERS values('200001000', 'LXL', 's4zrck@pew.net', '3024')`同样展示了如何一次性插入多列数据,包括教师ID、姓名、邮箱和办公室编号。...

    MySQL第一次作业.pptx

    4. **视频命名**: 视频命名应按照指定格式:`xxxMySQL第一次作业.mp4`。 5. **截止时间**: 提交截止时间为2024年4月1日晚上9点前。 通过以上步骤,可以有效地完成作业要求,并确保视频质量满足要求。此外,还可以...

    set names utf8.doc

    - **应用场景**: 当数据量较大时,为了避免一次性加载过多数据导致性能问题,可以使用 `limit` 子句来分页显示结果。 8. **更新表中的数据** - `update cn_user set cn_user_password='4QrcOUm6Wau+VuBX8g+IPg=='...

    第一次实验课实验内容1

    ### Web 编程技术实验知识点总结 #### 实验一:Web 服务器的安装与配置 ...- 报告命名方式:“姓名-学号-web编程第 n 次课实验报告.docx” - 提交截止时间:10 月 8 日 20:00 - 提交邮箱:13120212277@163.com

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

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

    实验课-第4次-18308045-谷正阳1

    UPDATE CHOICES SET TID = (SELECT TID FROM TEACHERS WHERE TNAME = 'rnupx') WHERE TID = '200016731' ``` 6. 更新学生年级:通过`UPDATE`语句将特定学生(编号“800071780”)的年级更新为“2001”。 ```sql ...

    经典SQL语句大全

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

    国家开放大学数据库应用技术第三次形考作业5

    第一个例子展示了如何简单地更新一个表中的数据;第二个例子则进一步介绍了如何通过子查询或多表连接的方式处理更复杂的更新需求。这些技能对于数据库管理是非常重要的,能够帮助我们在实际工作中有效地管理和维护...

    第二次上机实验报告1

    UPDATE Grades SET Gmark = 0 WHERE Sno IN (SELECT Sno FROM Student WHERE Clno = '01311') DELETE FROM Grade WHERE Sno IN (SELECT Sno FROM Student WHERE Clno IN ...) DELETE FROM Student WHERE Sname = ...

    数据库第二次实验报告

    ### 数据库第二次实验报告知识点梳理 #### 实验背景与目的 本实验旨在通过一系列实际操作加深学生对于数据库基本表数据操作的理解与掌握,包括数据的插入、更新与删除等核心功能,并利用SQL语言进行数据查询与更新...

    SQL Server2005分页查询

    在SQL Server 2005中,分页查询是一个常见的需求,特别是在处理大量数据时,为了提高用户体验,通常需要一次性加载一定数量的数据,而不是一次性显示所有数据。以下将详细讲解SQL Server 2005中分页查询的常用方法。...

    MySQL命令大全

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

    第四次作业2013170149李洋洋.txt

    它的基本形式为 `UPDATE TableName SET Column1 = NewValue1, Column2 = NewValue2 WHERE Condition`。比如,我们想将李洋洋的年龄改为21,可以写成 `UPDATE Students SET Age = 21 WHERE Name = '李洋洋'`。 4. **...

    visualfoxpro程序设计案例教程蔡莉vf按章9.ppt

    2. **插入子查询的结果**:允许一次插入多条记录。例如,计算每个系的平均年龄并存储到新的表中: ```sql INSERT INTO 系平均年龄 SELECT 所在系, AVG(年龄) FROM 学生 GROUP BY 所在系 ``` 5.3.2 数据更新 使用...

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

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

    数据库2021第2次作业答案1

    * 将选修了“gao”老师所担任的“数据库系统”课程的所有不及格同学的成绩修改为0分:UPDATE SC SET GRADE = 0 WHERE GRADE (SELECT C# FROM C WHERE CNAME = '数据库系统' AND T# IN (SELECT T# FROM T WHERE TNAME...

    MySQL第四阶段

    这种方式允许你一次性插入多条记录,每个值对用逗号分隔,每组值用括号包围。 - **方法二**:`INSERT INTO tb_name SET col_name=value,...` 这种方式更简洁,适用于插入单条记录,且可以使用子查询。 - **方法...

    第二次上机练习题目1

    SET institute = '外语' WHERE student_id = '15112005'; ``` - 要注意的是,`UPDATE`语句通常需要配合`WHERE`子句来指定修改条件,防止全局更新。 3. **数据删除**: - 使用`DELETE FROM`语句删除表中的数据...

    SQL server 触发器,在触发Merge过程中,逐行触发的解决办法 用group by 避免是一次触发中的多行更新或删除。

    标题和描述中提到的问题是关于如何在Merge过程中使触发器逐行触发,以避免一次触发中的多行更新或删除。 Merge语句是一种复杂的SQL操作,它结合了INSERT、UPDATE和DELETE,用于同步两个数据源。当Merge触发器被定义...

Global site tag (gtag.js) - Google Analytics