使用包含 FROM 子句的 UPDATE
2007-01-20 10:03
337 查看
如果 UPDATE 语句包含了未指定每个更新列的位置只有一个可用值的 FROM 子句(换句话说,如果 UPDATE 语句是不确定性的),则其结果将不明确。例如,对于下面脚本中的
use test
go
create table A(ie int, sex varchar(10), age int)
insert A select 1,'男',50
union all select 2,'女',33
create table B(id int, sex varchar(10), age int)
insert B select 1,'男',67
union all select 1,'女',43
update A set age=B.age from B where ie=B.id
select * from A
select * from a,b where A.id=B.id
go
drop table a
drop table b
go
当结合使用 FROM 和 WHERE CURRENT OF 子句时,可能发生同样的问题。在以下示例中,
一条 UPDATE 语句永远不会对同一行更新两次
一条 UPDATE 语句永远不会对同一行更新两次如果所更新对象与 FROM 子句中的对象相同,并且在 FROM 子句中对该对象只有一个引用,则指定或不指定对象别名均可。如果更新的对象在 FROM 子句中出现了不止一次,则对该对象的一个(且仅仅一个)引用不能指定表别名。FROM 子句中对该对象的所有其他引用都必须包含对象别名。
UPDATE语句,
Table1中的全部两行都满足
UPDATE语句中
FROM子句的限定条件;但是,将使用
Table1的哪一行来更新
Table2.中的行是不明确的。
use test
go
create table A(ie int, sex varchar(10), age int)
insert A select 1,'男',50
union all select 2,'女',33
create table B(id int, sex varchar(10), age int)
insert B select 1,'男',67
union all select 1,'女',43
update A set age=B.age from B where ie=B.id
select * from A
select * from a,b where A.id=B.id
go
drop table a
drop table b
go
当结合使用 FROM 和 WHERE CURRENT OF 子句时,可能发生同样的问题。在以下示例中,
Table2中的全部两行都满足
UPDATE语句中
FROM子句的限定条件。将使用
Table2的哪一行来更新
Table1中的行是不明确的。
一条 UPDATE 语句永远不会对同一行更新两次
一条 UPDATE 语句永远不会对同一行更新两次如果所更新对象与 FROM 子句中的对象相同,并且在 FROM 子句中对该对象只有一个引用,则指定或不指定对象别名均可。如果更新的对象在 FROM 子句中出现了不止一次,则对该对象的一个(且仅仅一个)引用不能指定表别名。FROM 子句中对该对象的所有其他引用都必须包含对象别名。
相关文章推荐
- Asp.net MVC: BindingHelperExtension的UpdateFrom如何使用?
- Mybatis中的SQL语句中的IN子句使用传入List作为包含条件
- C# from子句使用问题
- 黄聪:mysql下使用update set from select
- 子查询中可以包含order by 子句--(在from里面)
- 在AS2005的From子句中使用Select从句
- svn update 目录包含中文时出错(svn:Can’t convert string from ‘UTF-8′ to native encoding)
- 在AS2005的From子句中使用Select从句
- SQL SERVER Update from 使用陷阱
- 在AS2005的From子句中使用Select从句
- mysql下使用update set from select
- UPDATE一张表,同时在查询子句中使用SELECT问题
- 子查询三(在FROM子句中使用子查询)
- ORA-06547: INSERT, UPDATE 或 DELETE 语句必须使用 RETURNING 子句
- mysql下使用update set from select
- MySQL的子查询中FROM和EXISTS子句的使用教程
- 使用select查询时,各子句(from、where、order、on、limit)的位置规则
- 使用 TOP 子句限制UPDATE 语句更新的数据
- 使用hql查询---6.4.2: HQL查询的from子句
- 使用update set from where