服务器端用Oracle数据库,它有一张表里面有10万条记录,我要对其中符合条件的一千条进行逐个修改,如果查一条改一条肯定会非常慢(注:表里建立唯一索引的字段和我的查询条件不是同一字段)。我想先用一个条件把范围缩小到不如说2000条然后再从这2000条里查到唯一的一条进行修改。
    我的问题是我已经查出来了2000条,然后想再从这2000条里查出唯一的一条记录的时候SQL语句的from部分该怎么写?
    或是有无其他办法。

解决方案 »

  1.   

    如果每条记录有一个唯一标志,类似ACCESS里的ID
    那么就好办了。
    比如目前你查的2000条的条件为
    select * from tabel where conditon
    那么再从这2000条里查,其from 子句的条件里, 可以这样设定
     ID IN (select ID from tabel where conditon)
      

  2.   

    select * from (select * from tabel where conditon)  where id=XXX
      

  3.   

    我想问的是
    先查出2000条 Set rst1 = cnn.Execute("select * from table where c=1 ")然后再查的时候可不可以这样select * from rst1 where a=1 and b=2把先前得到的数据集当作一个表。如果按 atila1978(上帝之鞭)说的
    这个表有3个字段一起可以做为一个唯一标志a、b、c
    那么SQL就是这么写
    select * from table where c=1
    然后再查是用select * from table where (a=1 and b=2) in (select a,b from table where c=1)
    这样好象还是没次都要把整个表遍历一遍吧?
      

  4.   

    select * from rst1 where a=1 and b=2 and c=1不就OK??
      

  5.   

    是整个表遍历,呵,不过那是SQL引擎去做。呵
      

  6.   

    如果   select * from rst1 where a=1 and b=2 and c=1
    10万条遍历1000次而且a、b、c又不是主索引那不是很慢啊
      

  7.   

    上面那个恢复我看错了VB允真的许这样写?
    select * from rst1(一个ADO数据集) where a=1 and b=1 and c=1
      

  8.   

    我想问一下,在返回RS上,你条件a=1 and b=2 和条件为a=1 and b=2 and c=1的SQL语句,在返回记录的时间上,会有明显区别么??
    你的意思,是将条件为c=1的2000条先找出来,生成一个临时表,然后执行其他操作。那不更慢么?呵
      

  9.   

    好象不允许.rst1前加一个Where 然后把rst1 换成一个SQL语句,以次语句作为一个条件倒是可以。