Sqlite数据多表联合update

 其实在Mysql中,多表联合update不是什么难事。

语法:

1
UPDATE table_references SET col_name1=expr1 [, col_name2=expr2 ...] [ WHERE where_definition]

示例:

1
UPDATE table1, table2 SET table1.value=table2.value, a.type=b.type WHERE table1.sid=table2.sid;

同样的,在SqlServer中也可以很简单的用联合来实现:

1
UPDATE t1 SET col1=t2.col1 FROM table1 t1 INNER JOIN table2 t2 ON t1.col2=t2.col2;

    但是,很可惜,在Sqlite中却不支持这样的语法,那是不是Sqlite中就不支持多表联合update呢?当然不是的,其实Sqlite中多表联合update也可以实现,

    首先,Sqlite里面有一个新鲜玩意“INSERT OR REPLACE”,跟Mysql类似,这个结构能够保证在存在的情况下替换,不存在的情况下更新,用这个机制就可以轻松实现Update…From了。

1
INSERT OR REPLACE INTO t1( key , Column1, Column2) SELECT t2. key , t2.Column1,t2.Column2 FROM t2, t1 WHERE t2. key = t1. key ;

    这种方法要避免插入操作,首先要确保是依照主键执行的更新,如果where条件不是主键可能就有点麻烦了。

    要是不是主键的更新怎么办能?另外还有其他的办法吗?我们在这中情况下只能向典型的Update…where寻求帮助了,下面是一个例子:

1
UPDATE table1 SET col1 = 1 WHERE table1.col2 = ( SELECT col2 FROM table2 WHERE table2.col2 = table1.col2 AND table2.col3 = 5);




转载于:https://www.cnblogs.com/yzpopulation/p/4916898.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值