您的位置:首页 > 数据库

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

2005-08-03 16:50 183 查看
关于update语句在不同数据库中的差别 作者: ∣来源:http://www.javaresearch.org/原文地址∣2005-7-23 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, 这就不是我想要的结果了,有什么
办法可以避免吗?
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: