2017-04-22 164 views
1

我有一個20記錄的表。 我可以使用'Select distinct * from that_table'來獲取所有不重複的記錄。 也許大約有2001100條記錄。visual foxpro 9.0,如何查找/獲取重複記錄

如果我想檢查記錄在'distinct'後消失,如何將這133條記錄存入另一個表中。

另一個問題是 當從一個表追加新記錄到另一個表時,如何檢查附加記錄是否已經在目標表中?

感謝回答我的問題:)

回答

2

這將是2+百萬行的黑客,緩慢但你可以這樣做:

Select Sys(2017,'',0,3) As crc, * ; 
    from myTable Into Cursor crsTemp ; 
    nofilter 

Select * From crsTemp ; 
    where crc In ; 
    (Select crc From crsTemp; 
    having Count(*) > 1 ; 
    group By crc) ; 
    into Cursor crsDupes ; 
    nofilter 

Select crsDupes 
Browse 

你應該使用從一開始的主鍵。

對於第二個問題,我認爲最好使用「insert into」而不是追加。即:

Insert into tableA ; 
    select * from tableB t1 ; 
    where not exists (; 
     select * from tableA t2 ; 
     where t1.field1 = t2.field1 and t1.field2 = t2.field2) 
+0

謝謝回答,相當useful.Solution 1是好的,但包含了如此的記錄數超過133.I想修改的code.I「第一次出現」記載想要得到的結果看起來像是在兩個表(原點和不同點)之間做出區別。 :) –

+0

當然,它會超過133.正如我已經說過,你應該從一開始就有主鍵。在重複的情況下,哪一個重複是重要的?畢竟,副本是重複的,它沒有訂單。 –

0

這裏是另一種方式來查找重複記錄: 假設你不保持刪除記錄遊逛......

select tableA 
set deleted off 
delete all 
index on <key expression> to keyfield unique 
set deleted on 
recall all 
browse for deleted 

此過程將刪除所有記錄,並召回聲明將僅適用於已編入索引的記錄,並將標記爲已刪除的副本保留。

0

試試這個來檢查是否有重複記錄。

SELECT colName, count(*) FROM tblName GROUP BY colName HAVING count(*) > 1