关于update语句在不同数据库中的差别

关于update语句在不同数据库中的差别
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写起来越麻烦 
2004-07-23 20:29 | progame 
# re: 关于Update语句在不同数据库中的差别    
我的post中的还不是使用标准SQL,标准SQL-92似乎更麻烦 :( 
2004-07-23 22:05 | 温少 
# re: 关于Update语句在不同数据库中的差别    
感谢你的经验,已经学会了 
2005-01-27 14:42 | www 
# re: 关于Update语句在不同数据库中的差别    
谢谢!我又解决了一个问题,我已经查了一天了,终于查到了。 
2005-03-02 17:17 | 哈哈哈 
# re: 关于Update语句在不同数据库中的差别    
帮我们解决了问题,谢谢 
2005-03-02 17:26 | 亮 
# re: 关于Update语句在不同数据库中的差别    
帮我们解决了问题,谢谢 
2005-03-02 17:26 | 亮 
# re: 关于Update语句在不同数据库中的差别    
为这个问题郁闷了好久,谢谢 
2005-03-29 09:48 | longylongy 
# re: 关于Update语句在不同数据库中的差别    
谢谢 
2005-04-10 00:23 | eafy 
# re: 关于Update语句在不同数据库中的差别    
很有用,谢谢 
2005-04-19 10:32 | song 
# re: 关于Update语句在不同数据库中的差别    
我又遇到新问题,oracle是否支持子串的比较?如某个表的一个字段与另一个表的某个字段的子串作对比,我试了一下,好象不行,郁闷...... 
2005-04-19 18:07 | 芳 
# re: 关于Update语句在不同数据库中的差别    
好东西,不过怎么我在oracle update好慢的呢? 

我就从3w记录更新21条。。。等不到 

后来我在21条记录更新21条记录,要22秒 
2005-04-24 15:41 | 阿心 
# re: 关于Update语句在不同数据库中的差别    
@阿心 
Oracle的写法当然慢,你要快的话,写存储过程吧 
2005-04-29 00:21 | 温少 
# re: 关于Update语句在不同数据库中的差别    
那用hibernate写sql数据库中的update语句怎么写? 

2005-04-29 13:24 | 学生 
# re: 关于Update语句在不同数据库中的差别    
那informix中呢,有人知道吗 
2005-06-09 09:51 | 小顾 
# re: 关于Update语句在不同数据库中的差别    
很精辟,好! 
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, 这就不是我想要的结果了,有什么 
办法可以避免吗? 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值