下面是这样一个例子:
两个表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)
分享到:
相关推荐
如果我们的数据库设计只包含一个表`Ttest`来表示层级关系(即`Ttest.parentId = Ttest.id`),我们可以修改上面的`UPDATE`语句,将`FROM`子句中的表也设定为`Ttest`,但需要为其中一个实例赋予别名以区分它们: ...
此时,你需要使用`UPDATE`语句结合`FROM`子句,这是一种更复杂的更新操作,通常被称为“基于连接的更新”或“自连接更新”。这种技术在数据库管理和数据同步场景中非常常见,尤其当你要根据源表的数据来更新目标表时...
例如:`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语句是用于在一个表中更新数据时,依据另一个表的条件进行操作的关键技术。这在处理复杂的数据同步或修正场景时非常有用。在本例中,我们将探讨如何利用多表关联来更新数据,并通过...
在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”错误解决方法 在MySQL数据库管理过程中,遇到SQL语法错误是家常便饭,其中一种较为常见的错误是“You can’t specify target table for ...
在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"是一个常见的错误提示,意味着在同一个SQL语句中,你不能直接在一个`UPDATE`或`DELETE`语句的`FROM`子句中引用你想要更新或删除的表...
SET 列名 = (SELECT 列名 FROM 表2 WHERE 条件) WHERE 条件; ``` 其中,“表1”是需要被更新的表,“表2”是用来提供更新值的表。“列名”表示需要更新的列名,而“条件”则是用来匹配两个表之间的关联条件。 ### ...
informixdb -d database_name -c "UPDATE Employees SET Salary = Salary * 1.1 WHERE Department = 'Sales'" ``` 总结,从UPDATE到SELECT的转换主要是将WHERE子句应用到SELECT语句中。在JavaScript中,我们使用...
UPDATE SET a.customer_type = 'CRM', b.customer_type; ``` 使用merge语句可以避免编写复杂的逻辑判断,并且可以提高处理效率,特别适用于需要根据条件合并多表数据的场景。 4. 快速游标更新法: 当更新操作...
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 ); ``` 这里,每个`...
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 子句...
在某些数据库系统中,如MySQL,如果你尝试在 `UPDATE` 语句的 `FROM` 子句中直接引用要更新的目标表(这里是A表),会收到错误提示,因为这违反了SQL规范。 在进行多表关联更新时,应确保有足够的权限执行这类操作...
update LoginUser set password=********************** 辉煌系列修改管理员密码: update LoginUser set password='要修改的密码' where etypeid='00000' 辉煌系列查看所有操作员密码: SELECT etypeid AS 编号, ...
SET (, ) = (SELECT , <column_name> FROM <table_name> WHERE <alias.column_name> = ); ``` 其中,`<alias>` 是表的别名,`<column_name>` 是要更新的列名。 三、Update 语句中使用 Join 语句 在 Update 语句中...
django-bulk-update, 在 Django ORM上使用一个查询进行批量更新 django-bulk-update 简单批量更新 Django ORM或者 helper 函数。这个项目旨在批量更新给定的对象,使用英镑的一个查询 Django 。安装pip install ...
UPDATE SET a.join_state = b.join_state ``` `MERGE`语句是一种非常强大的工具,它可以结合`INSERT`, `UPDATE`和`DELETE`操作。在这个例子中,我们仅关注`UPDATE`部分。`MERGE`语句允许我们在一个步骤中完成匹配和...