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);

来自为知笔记(Wiz)

时间: 2024-12-28 22:35:11

Sqlite数据多表联合update的相关文章

[转]Sqlite数据多表联合update

其实在Mysql中,多表联合update不是什么难事. 语法: UPDATE table_references SET col_name1=expr1 [, col_name2=expr2 ...] [WHERE where_definition] 示例: UPDATE table1, table2 SET table1.value=table2.value, a.type=b.type WHERE table1.sid=table2.sid; 同样的,在SqlServer中也可以很简单的用联合

SQLite数据表和视图

一.创建数据表: 该命令的语法规则和使用方式与大多数关系型数据库基本相同,因此我们还是以示例的方式来演示SQLite中创建表的各种规则.但是对于一些SQLite特有的规则,我们会给予额外的说明.注:以下所有示例均是在sqlite自带命令行工具中完成的. 1). 最简单的数据表: sqlite> CREATE TABLE testtable (first_col integer); 这里需要说明的是,对于自定义数据表表名,如testtable,不能以sqlite_开头,因为以该前缀定义的表名都用于

两个表联合查询获取聊天表中用户最新的一条聊天数据

一个用户表,一个聊天记录表,两个表联合查询获取聊天表中用户最新的一条聊天数据 select c.contentfrom sixin as c where c.tid = a.user_idorder by ctime desc limit 0,1) as content,(select c.statusfrom sixin as c where c.tid = a.user_idorder by ctime desc limit 0,1) as status from users as a, s

SQLITE数据表主键设置Id自增方法

SQLITE数据表主键设置Id自增方法 标签: sqliteintegerinsertnulltableapi 2010-01-12 08:39 35135人阅读 评论(8) 收藏 举报  分类: SQL(11)  版权声明:本文为博主原创文章,未经博主允许不得转载. 搞定了一个困扰许久的问题,原来sqlite中的主键也是可以设置为自增的:)方法就是声明为 INTEGER PRIMARY KEY 的字段可以自动增加.    网上查到资料说,从 SQLite 的 2.3.4 版本开始,如果将一个表

已有数据的表-建联合索引

清理重复数据,建立联合唯一索引 1. 查看重复数据 SELECT * FROM holiday_focamobilerel WHERE (cardnumber, mobile) IN (SELECT cardnumber, mobile FROM holiday_focamobilerel GROUP BY cardnumber, mobile HAVING COUNT(1) > 1); 2. 删除重复数据 - 保留order_id and sub_order_id不为空的 - 如果order_

Android程序员必掌握的sqlite数据库连表查询

SQL查询的基本原理:两种情况介绍. 第一.   单表查询:根据WHERE条件过滤表中的记录,形成中间表(这个中间表对用户是不可见的):然后根据SELECT的选择列选择相应的列进行返回最终结果. 第二.   两表连接查询:对两表求积(笛卡尔积)并用ON条件和连接连接类型进行过滤形成中间表:然后根据WHERE条件过滤中间表的记录,并根据SELECT指定的列返回查询结果. 第三.   多表连接查询:先对第一个和第二个表按照两表连接做查询,然后用查询结果和第三个表做连接查询,以此类推,直到所有的表都连

sql两表联合更新

标签:sql 联合更新 数据库 休闲 职场 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://yukai.blog.51cto.com/1761494/372585 今天遇到数据库的一个更新操作. 1个数据库中有两个表(其中一个表是从另一个数据库复制来的,方法见我以前文章),这两个表通过公司名称对应起来,其中一个有称谓(Mr.,Miss.,Mrs),另一个没有,将这个表的称谓导入到另一个表中: sql:  update tb_c

Sqlite如何修改表结构字段类型

SQLite 仅仅支持 ALTER TABLE 语句的一部分功能,我们可以用 ALTER TABLE 语句来更改一个表的名字,也可向表中增加一个字段(列),但是我们不能删除一个已经存在的字段,或者更改一个已经存在的字段的名称.数据类型.限定符等等. 改变表名 - ALTER TABLE 旧表名 RENAME TO 新表名 增加一列 - ALTER TABLE 表名 ADD COLUMN 列名 数据类型 而修改一列无法像其他数据库那样直接以“ALTER TABLE 表名 ADD COLUMN 列名

MyBatis 多表联合查询及优化

序 这篇文章我打算来简单的谈谈 mybatis 的多表联合查询.起初是觉得挺简单的,没必要拿出来写,毕竟 mybatis 这东西现在是个开发的都会用,而且网上的文章也是一搜罗一大堆,根本就用不着我来重复.但是吧,就我前几天在做一个多表联合查询的时候,竟然出了很多意想不到的问题,而且这些问题的出现,并不是对 mybatis 不了解,而是在用的过程中会或多或少的忽略一些东西,导致提示各种错误. 背景 老规矩,开始之前,还是要先说说这件事的背景.也就是最近几天,公司要做一个后台的管理平台,由于之前的一