首页 新闻 搜索 专区 学院

各位在线的朋友,求个思路?

0
悬赏园豆:20 [已解决问题] 解决于 2012-07-30 15:51

1.有3张表,就叫做a表、b表、c表吧(3张表的数据都很大上万条数据)。

 

2.首先要查询a表的所有数据,然后根据a表的条件(有4个)去查询b表的ID,然后根据b表的ID去更新c表的数据。

 

3.写个我现在做的简单步骤:

查询出a表的数据(select * from a),然后循环:

for(int i=0;i<a表的数据;i++)

{

//根据a表的条件去查询表的ID

select id from b

where

  b.xx1 = a表.xx1

  and b.xx2 = a表.xx2

  and b.xx3 = a表.xx3

// 根据查询出来的ID去更新c表

update c 

  set xx1 = a.xx5

  ,xx2 = a.xx6

  ,xx3 = a.xx7

where

  xxid = b.id

  }

 

我现在的问题就是觉得这样很慢,影响效率,如果数据有10万条,就要查询10万次,然后在更新10万次。

各位在线的朋友们,有没有什么好的思路,在线求解答,谢谢。

Superman不会飞的主页 Superman不会飞 | 初学一级 | 园豆:113
提问于:2012-07-26 18:37
< >
分享
最佳答案
1

可以把你这些逻辑都写成一个存储过程。

收获园豆:20
Launcher | 高人七级 |园豆:45045 | 2012-07-26 18:54

我现在是写了3个存储过程,查询两个,更新一个,  循环还是才代码中写的。

Superman不会飞 | 园豆:113 (初学一级) | 2012-07-26 19:07

有没有其他更好的解决办法呢?

Superman不会飞 | 园豆:113 (初学一级) | 2012-07-26 19:10

@红色小内内: 写成一个存储过程,存储过程可以包含复杂的业务逻辑,所有查询、更新、循环的逻辑代码都用SQL来写。从技术上讲,更好的解决办法,就是找个SQL很厉害的人,帮你优化下你的代码逻辑。抛开技术层面,你得从需求入手,重构架构。

Launcher | 园豆:45045 (高人七级) | 2012-07-27 09:18
其他回答(4)
0

如果直接写一个SQL取得那四个字段 ,然后再更新不是更好吗?

Tom.汤 | 园豆:2016 (老鸟四级) | 2012-07-26 20:34

呵呵,谢谢哈。我这里提问只是简单的写了下代码,  所以查询写的是*。  在项目中我写的是我只需要的字段。  现在我是想有没有其他的思路来解决这个查询一次,然后在更新一次的方法。  

支持(0) 反对(0) Superman不会飞 | 园豆:113 (初学一级) | 2012-07-26 20:39

@红色小内内: 

如果是更新的话,可以写一个sql直接更新的,sqlserver的update 可以写查询的

支持(0) 反对(0) Tom.汤 | 园豆:2016 (老鸟四级) | 2012-07-26 20:47
0

如果暂时没有什么好的办法去优化的话,你可以先把这个存储过程作为一个作业,在服务器闲置的时候去执行,这样也不影响使用。

另外既然三张表有这样的关系,为什么当初不建立一个触发器呢……

Alec-Yin | 园豆:188 (初学一级) | 2012-07-27 08:57
0

写一条sql语句就好了吧

Update c
Set c.xx1 = a.xx5
  ,c.xx2 = a.xx6
  ,c.xx3 = a.xx7
From c 
JOIN b
on c.xxid = b.id
JOIN  a
on  b.xx1 = a.xx1
  and b.xx2 = a.xx2
  and b.xx3 = a.xx3
gunsmoke | 园豆:3592 (老鸟四级) | 2012-07-27 10:01
0

楼上的答案就已经满足

Shannon | 园豆:601 (小虾三级) | 2012-07-27 16:56
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册