2017-04-22 9 views
1

私は20レコードのテーブルを持っています。 すべてのレコードを繰り返さないようにするには、「select * from that_table」を使用します。 おそらく約2001100レコードです。visual foxpro 9.0、繰り返しレコードの検索/取得方法

レコードを確認したい場合、133レコードを別のテーブルに取得するには、 'distinct'の後に消えてしまいます。

もう1つの質問は あるテーブルから別のテーブルに新しいレコードを追加するときに、追加されたレコードがターゲットテーブルにないことを確認する方法はありますか?私の質問に答えるための

感謝:)

答えて

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 

あなたはスタートから主キーを使用している必要があります。

あなたの2番目の質問では、「挿入する」を追加するのではなく、「挿入する」ことをお勧めします。すなわち:ここ

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

回答ありがとうございます。解決策1は良いですが、「最初に発生する」レコードが含まれているため、レコードの数が133を超えています。コードを変更しようとしています。結果は2つのテーブル(起点の1つと別の1つ)の間の違いを起こすように見えます。 :) –

+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 
関連する問題