您的位置:首页 > 数据库

关于update在不同数据库的使用

2013-05-01 16:41 232 查看
sql语法虽然简单,但也有忘记的可能,写下来,以备不时之需。

1、单表更新多个字段

DB2:

updatet1set(id,name)=('1','2')wherenamelike'kiss%'--正确运行

updatet1setid='1',name='2'wherenamelike'kiss%'--正确运行

MSSQL:

updatet1set(id,name)=('1','2')wherenamelike'kiss%'----报:'('附近有语法错误。

updatet1setid='1',name='2'wherenamelike'kiss%'--正确运行

2、多表连合更新

DB2:

updatet1setid=(selectidfromt2wheret2.namelike'kiss%'--正确运行

updatet1set(id,name)=(selectid,namefromt2wheret2.namelike'kiss%'--正确运行

updatet1asetid=b.idfromt2bwhereb.id='dkdkd'--sql遇到非法符号

MSSQL:(updatetablename别名,这种写法是不对的)

updatet1setid=b.id,bid=b.bidfromt2bwhereb.bid='dkdkd'--正确运行

如果要用别名,则也要把t1放在from后面

updateaseta.id=b.id,a.bid=b.bidfromt1a,t2bwherea.id=b.idandb.bid='dkdkd'--正确运行(别名放在from后)

综上,更新多个字段,有两种写法,分别是

1、updatetnameset(a1,a2...)=(selecta1,a2...from...)--DB2写法

2、updatetnameseta1=b.a2,a2=b.a2...fromb...--mssql写法

Oracle下面跟db2差不多,环境没搭建好,就不测试了,要用的时候再参考以上两种写法.

简单在mysql下测试,结果如下,mysql与mssql都支持seta1=b.a2,a2=b.a2...fromb.的写法

mysql>updateorder2setid=1,price=2whereordernum='kdkdk';
QueryOK,0rowsaffected(0.00sec)
Rowsmatched:0Changed:0Warnings:0

mysql>updateorder2set(id,price)=(1,2)whereordernum='dkdkd';ERROR1064(42000):YouhaveanerrorinyourSQLsyntax;checkthemanualthat
correspondstoyourMySQLserverversionfortherightsyntaxtousenear'(id,
price)=(1,2)whereordernum='dkdkd''atline1



                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: