`

关于update set from

阅读更多
关键字: 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   

MySQL : update b,a set b.ClientName =a.name 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)
3
0
分享到:
评论

相关推荐

    sql server的 update from 语句的深究

    如果我们的数据库设计只包含一个表`Ttest`来表示层级关系(即`Ttest.parentId = Ttest.id`),我们可以修改上面的`UPDATE`语句,将`FROM`子句中的表也设定为`Ttest`,但需要为其中一个实例赋予别名以区分它们: ...

    update 带from字句的更新

    此时,你需要使用`UPDATE`语句结合`FROM`子句,这是一种更复杂的更新操作,通常被称为“基于连接的更新”或“自连接更新”。这种技术在数据库管理和数据同步场景中非常常见,尤其当你要根据源表的数据来更新目标表时...

    oracle的update的五种方式

    例如:`MERGE INTO t_join_situation a USING (SELECT * FROM t_people_info) b ON (a.people_number=b.people_number) WHEN MATCHED THEN UPDATE SET a.join_state=b.join_state WHEN NOT MATCHED THEN INSERT ...

    ORACLE_多表关联_UPDATE_语句

    Oracle数据库中的多表关联UPDATE语句是用于在一个表中更新数据时,依据另一个表的条件进行操作的关键技术。这在处理复杂的数据同步或修正场景时非常有用。在本例中,我们将探讨如何利用多表关联来更新数据,并通过...

    MySQL报错1093 – You can’t specify target table ‘t’ for update in FROM clause, Time: 0

    在MySQL数据库中,错误代码1093 - "You can’t specify target table ‘t’ for update in FROM clause" 是一个常见的错误,它通常发生在尝试在一个`UPDATE`语句的`FROM`子句中直接引用要更新的目标表时。...

    mysql中You can’t specify target table for update in FROM clause错误解决方法.docx

    ### MySQL中“You can’t specify target table for update in FROM clause”错误解决方法 在MySQL数据库管理过程中,遇到SQL语法错误是家常便饭,其中一种较为常见的错误是“You can’t specify target table for ...

    mysql中错误:1093-You can’t specify target table for update in FROM clause的解决方法

    在MySQL中,错误1093 - "You can't specify target table for update in FROM clause" 是一个常见的问题,它发生在尝试在`UPDATE`语句的`FROM`子句中直接引用要更新的同一张表时。这个错误表示MySQL不支持在`UPDATE`...

    mysql中You can’t specify target table for update in FROM clause错误解决方法

    在MySQL数据库中,"You can’t specify target table for update in FROM clause"是一个常见的错误提示,意味着在同一个SQL语句中,你不能直接在一个`UPDATE`或`DELETE`语句的`FROM`子句中引用你想要更新或删除的表...

    Update和Select结合使用

    SET 列名 = (SELECT 列名 FROM 表2 WHERE 条件) WHERE 条件; ``` 其中,“表1”是需要被更新的表,“表2”是用来提供更新值的表。“列名”表示需要更新的列名,而“条件”则是用来匹配两个表之间的关联条件。 ### ...

    根据update语句自动生成select语句

    informixdb -d database_name -c "UPDATE Employees SET Salary = Salary * 1.1 WHERE Department = 'Sales'" ``` 总结,从UPDATE到SELECT的转换主要是将WHERE子句应用到SELECT语句中。在JavaScript中,我们使用...

    update语句的优化-oracle .pdf

    UPDATE SET a.customer_type = 'CRM', b.customer_type; ``` 使用merge语句可以避免编写复杂的逻辑判断,并且可以提高处理效率,特别适用于需要根据条件合并多表数据的场景。 4. 快速游标更新法: 当更新操作...

    ORACLE多表关联的update语句

    SET city_name = (SELECT b.city_name FROM tmp_cust_city b WHERE b.customer_id = a.customer_id) WHERE EXISTS ( SELECT 1 FROM tmp_cust_city b WHERE b.customer_id = a.customer_id ); ``` 这里,每个`...

    MySQL数据库中group by语句与update语句的用法研究.pdf

    update teacher set sal=sal*1.05 where tsex=' 男 ' and sal<(select avg(sal) from (select avg(sal) as sal from teacher where tsex=' 男 ')t) 三、结论 在 MySQL 数据库中使用 group by 子句时,select 子句...

    SQL update 多表关联更新的实现代码

    在某些数据库系统中,如MySQL,如果你尝试在 `UPDATE` 语句的 `FROM` 子句中直接引用要更新的目标表(这里是A表),会收到错误提示,因为这违反了SQL规范。 在进行多表关联更新时,应确保有足够的权限执行这类操作...

    管家婆各版本密码清除工具脚本

    update LoginUser set password=********************** 辉煌系列修改管理员密码: update LoginUser set password='要修改的密码' where etypeid='00000' 辉煌系列查看所有操作员密码: SELECT etypeid AS 编号, ...

    oracle 多表做update insert语句.docx

    SET (, ) = (SELECT , <column_name> FROM <table_name> WHERE <alias.column_name> = ); ``` 其中,`<alias>` 是表的别名,`<column_name>` 是要更新的列名。 三、Update 语句中使用 Join 语句 在 Update 语句中...

    django-bulk-update, 在 Django ORM上使用一个查询进行批量更新.zip

    django-bulk-update, 在 Django ORM上使用一个查询进行批量更新 django-bulk-update 简单批量更新 Django ORM或者 helper 函数。这个项目旨在批量更新给定的对象,使用英镑的一个查询 Django 。安装pip install ...

    update 语句优化update 语句优化update 语句优化

    UPDATE SET a.join_state = b.join_state ``` `MERGE`语句是一种非常强大的工具,它可以结合`INSERT`, `UPDATE`和`DELETE`操作。在这个例子中,我们仅关注`UPDATE`部分。`MERGE`语句允许我们在一个步骤中完成匹配和...

Global site tag (gtag.js) - Google Analytics