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

来源:互联网 发布:mac blu-ray player 编辑:程序博客网 时间:2024/06/05 07:15
关于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, 这就不是我想要的结果了,有什么 
办法可以避免吗? 
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 小米4玩王者荣耀卡怎么办 华为荣耀7i卡顿怎么办 华为荣耀7卡的怎么办 荣耀8手机有孤独怎么办 红米note4玩游戏卡怎么办 红米note4x玩游戏卡怎么办 华为4c死屏怎么办 华为4c充电很慢怎么办? 华为4c突然死机了怎么办 华为畅玩4c内存不足怎么办 荣耀4c一直亮屏怎么办 华为手机返回键失灵怎么办 荣耀6p死机了怎么办 荣耀6主板烧坏了怎么办 虚拟运营商倒闭了号怎么办 买到二次放号怎么办 新运动鞋鞋穿着有点紧怎么办 一件代发被买家退货后怎么办? 洗了翻毛的鞋子怎么办 猫眼竹芋泡根了怎么办 双线花叶子卷了怎么办 华为云收藏满了怎么办 小米6云空间满了怎么办 华为云存储已满怎么办 苹果云备份空间不足怎么办 oppor9指纹与密码忘记怎么办 oppo显示密码格式不对怎么办 oppo云服务密码忘了怎么办 小米云内存满了怎么办 id储存空间满了怎么办 苹果手机邮箱服务器连接失败怎么办 苹果查看id闪退怎么办 域名卖出去后涉及赌博怎么办 发票认证后对方作废了怎么办 手机在屋里没信号怎么办 百度云上传文件和谐怎么办 收货地址写错了怎么办 阿里巴巴国际版出现加密令牌怎么办 淘宝寄货到转运仓拒收怎么办 淘宝已发货买家申请退货怎么办 买家给了一个差评不接电话怎么办