首页 新闻 赞助 找找看

高分求教 SQL优化的问题

0
悬赏园豆:60 [已解决问题] 解决于 2013-02-26 13:37

例如有两个表,A表的结构为id,name

                    B表的结构为id,name1

A,B两个表的行数一样,id也一一对应(一致),A表中的name字段都没有值,B表中的name1有值,SQL怎么写能让B表的name1字段值一次性的快速的更新到A表中的name字段。

特别说明:数据库为SQLite

 

请大侠们帮帮忙!

志誠的主页 志誠 | 初学一级 | 园豆:122
提问于:2013-02-25 10:46
< >
分享
最佳答案
0

ID为主键时:replace into A(id ,name) SELECT id,name1 FROM B;

未设主键时:replace into A(rowid,id,name) SELECT rowid,id,name1 FROM B;

replace是根据pk来进行判断的,如果表没有明确指定pk,那pk就是rowid。

如果A、B表还有其他字段比如sex,age但只需修改NAME时:

replace into A(rowid,id,name,sex,age) select A.rowid,A.id,B.name1,A.sex,A.age from A inner join B on A.id=B.id;[原理将A表的数据集替换成select查询出来的结果集,因为select查询出来的除name是B表的数据其余都是A表本身的数据,所以做替换后相当于只更新了name列。

志誠 | 初学一级 |园豆:122 | 2013-02-26 11:36
其他回答(3)
0
UPDATE SET A.name=B.name1 
FROM A INNER JOIN B ON A.id=B.id
收获园豆:10
滴答的雨 | 园豆:3681 (老鸟四级) | 2013-02-25 10:49

滴答的雨 的方法好象行不通哦  继续求教中......

支持(0) 反对(0) 志誠 | 园豆:122 (初学一级) | 2013-02-25 11:06

@志誠: 不会吧,看要求就是这样去实现啊。你执行后的结果有什么不满足要求的呢!只有一部分有值?(有相同id的对应的name都应该会被赋值)

支持(0) 反对(0) 滴答的雨 | 园豆:3681 (老鸟四级) | 2013-02-25 11:08

@滴答的雨: 有语法错误

支持(0) 反对(0) 志誠 | 园豆:122 (初学一级) | 2013-02-25 11:43
0
update t set t.title=b.title from t,b where t.id=b.id

试试看

收获园豆:10
telang | 园豆:646 (小虾三级) | 2013-02-25 11:31

[SQL] update T_TB_SDDR set BJGXSJ=v.gxsj from T_TB_SDDR t,V_HZXX v where t.bjdcbid=v.id

[Err] 1 - near "from": syntax error

SQLite好象这样写有语法错误哦

支持(0) 反对(0) 志誠 | 园豆:122 (初学一级) | 2013-02-25 11:42

@志誠:  没用过sqlLite 。 此sql 在sql server 中行得通呢  你在检查你的语句 看看

支持(0) 反对(0) telang | 园豆:646 (小虾三级) | 2013-02-25 11:47

@_popc: 已经查过了  sqlite不去支持update ... from 

支持(0) 反对(0) 志誠 | 园豆:122 (初学一级) | 2013-02-25 14:13
0

如果id是主键,

insert or replace into a(id,name) select a.id, b.name1 from a,b where a.id=b.id
收获园豆:40
Engineer | 园豆:331 (菜鸟二级) | 2013-02-26 10:11
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册