关于update语句在不同数据库中的差别--[转贴]

来源:互联网 发布:中小型企业网络组建 编辑:程序博客网 时间:2024/05/16 04:38

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)
posted on 2004-07-23 20:06 温少 阅读(4106) 评论(16)  编辑 收藏 

评论
# re: 关于Update语句在不同数据库中的差别    
没错 t-sql对标准sql进行了扩充和改造 
比如说top n,虽然功能比limit差,但很多时候用起来还是比较好的 

说到update 这样更能有代表性 
update a 
set a.a1 = b.b1,a.a2 = c.c2 
from a 
inner join b on ... 
inner join c on ... 

连接表越多,则标准sql写起来越麻烦 
2005-06-17 08:56 | Garfield 
# re: 关于Update语句在不同数据库中的差别    
顺便提个问题: 
有两个表t1,t2,数据内容如下: 
t1: 

f1 f2 
101 100 
102 200 
103 300 


t2: 

f1 f2 
101 111 
102 222 

如果运行如下语句: 
update t1 set f2=(select f2 from t2 where t1.f1=t2.f1) 

t1里面f1=101,102的f2被更新为111,222。这是我想要的结果, 
f1=103的f2被更新为null, 这就不是我想要的结果了,有什么 
办法可以避免吗? 

问题提的很好!

作者: JavaResearch

原创粉丝点击