数据比较(50分)

  • 主题发起人 主题发起人 unicom
  • 开始时间 开始时间
U

unicom

Unregistered / Unconfirmed
GUEST, unregistred user!
现有如下两行数据:
行A 行B
20210 20210
20211 20211
… …
80916 80900
80917 80901
… …
要求比较行A中的那些行数据,是行B中没有的。
我现在是用二重循环做的,但行数很多时,效率很底。
请问有没有好的解决方法。


 
select * from table1 where 行A<>行B
 
用dos命令,fc忘了是什么,我同学说查找大文档的也很快
 
我想行A和行B应该在不同的表中吧,如果在同一个表,将行B 减去行A,然后对结果是否为0为
1进行记录.
不同的表只有分别选出来,然后进行比较了,不知道这是不是就是你说的二重循环?
 
dopro 你的查询不能达到我的要求
我的要求是列A中的那些行数据,是列B中没有的,并不是比较同一行数据是否相同。
即列A中某一行是列B中所有行都没有出现,才把此行提出。
 
select * from table1 where 行A not in( select * from 行B)
 
gxcooo:
数据少时,返回结果正确。当数据很多时,怎么不返回结果集,只返回一个空行。
 
to unicom:
呵呵, 你的机器吃不消了,一直都还没有返回亚,再等等。
 
to LHA:
我等好半天了,返回的就是一个空行。
有没有什么好的方法提高效率。
 
Here is a sample, table is tblTest (fa,fb):

select * from tblTest a
where NOT exists
(select * from tblTest b where a.fa=b.fb)
 
建议你用一数组方式,将A的记录传至一个数组,再到B中查找,当然B最好建索引。
用locat查找,我认为很快。我的程序就是这样做的
 
to ourself,:你的查询可以实现我的要求,能不能把这条SQL解释一下
另外数据多时,还是很慢,我想做个进度条(看是不是死机),
应根据什么确定MAXVALUE和STEP
 
首先把数据全部查出来,分别放到两个数组(或记录集)A AND B中,记住,取回的数据要按照你要比较的字段
做好排序.这样你就得到了两个排好序的A与B.这样你只要做一次遍历就可以取出所有满足你
要求的记录了.查找时设置当前的指针,两个指针同时在A与B中移动.
 
to proman:怎么会是一次遍历就可以了,具体说说
 
开始了.
现在的问题是有A与B中有一个字段值需要比较,A与B对需要比较的字段已经做过了排序,假设
排序顺序均为升序,说明采用示意写法
var
pa:integer;
pb:integer;
i:integer;
begin
pa:=0;
pb:=0;
while true
begin
if a[pa]<b[pb] then
begin
inc(pa);
把a[pa]记下来,是你需要的值;
end
else if a[pa]>b[pb] then
inc(pb)
else if a[pa]=b[pb] then
begin
inc(pa);
inc(pb);
end;
if pb>b.length then
begin
for i:=pa to a.length do
//把A加入你要的数据
break
end;
if pa>a.length then break;
end;
end;
 
to proman:数据不全是INTEGER呀
 
不也一样吗,不是数值也可以比较啊,只要是有序的不就可以了吗.
 
多人接受答案了。
 
后退
顶部