5

フォックスプロデータベースから大量のデータを取得し、それを操作してmysql dbに挿入しようとしています。一度にすべてを行うには多すぎるため、たとえば 10000 レコードのバッチで行いたいと考えています。Fox Pro SQL の LIMIT 5, 10 に相当するものは、select ステートメントのようなものです。

名前、住所を人数制限 5、10 から選択します。

つまり、5 番目から始めて 10 の結果のみが返されます。オンラインで見回したところ、明らかにあまり役に立たないトップについてのみ言及されています。

4

8 に答える 8

2

FoxProは、LIMIT句を直接サポートしていません。「TOPnn」はありますが、指定されたパーセンテージ内の「最上位レコード」のみを提供し、それでも返される32kレコード(最大)の制限があります。

データをCSVとしてダンプする方がよい場合があります。または、それが実用的でない場合(サイズの問題のため)、ダンプする一連のBEGIN-INSERT(x10000)-COMMITステートメントを自動生成する小さなFoxProスクリプトを作成します。一連のテキストファイル。もちろん、これにはFoxPro開発環境が必要になるため、これは状況に当てはまらない場合があります...

于 2009-04-06T23:20:42.710 に答える
2

Visual FoxPro は LIMIT を直接サポートしていません。この制限を超えるために、次のクエリを使用しました。 SELECT TOP 100 * from PEOPLE WHERE RECNO() > 1000 ORDER BY ID; ここで、100 は制限、1000 はオフセットです。

于 2015-07-21T17:28:56.513 に答える
0

返された行数に応じて、.NET Framework を使用している場合は、取得した DataTable を次の方法でオフセット/制限できます。

dataTable = dataTable.AsEnumerable().Skip(offset).Take(limit).CopyToDataTable();

アセンブリ System.Data.DataSetExtensions を忘れずに追加してください。

于 2016-04-05T12:07:16.273 に答える
0

ここで、これをテーブルに合わせます。2分くらいかかりました、私はこれをあまりにも頻繁にやっています。

N1 - 何でもグループ化し、max(id) を取得したことを確認します。recno() を使用して、正しくソートされたものを作成できます

N2 - ID = N1 の最大 ID である N1 に参加し、N2 から必要なフィールドを表示します。

次に、他のテーブルに結合する場合は、すべてを括弧で囲み、エイリアスを付けて結合に含めます。

Select N1.reference, N1.OrderNoteCount, N2.notes_desc LastNote
FROM
(select reference, count(reference) OrderNoteCount, Max(notes_key) MaxNoteId
from custnote 
where  reference != '' 
Group by reference
) N1
JOIN 
(
select reference, count(reference) OrderNoteCount, notes_key, notes_desc
from custnote 
where  reference != '' 
Group by reference, notes_key, notes_desc
) N2 ON N1.MaxNoteId = N2.notes_key
于 2013-07-03T23:30:29.410 に答える