5

我正在尝试从 fox pro 数据库中提取大量数据,使用它并将其插入到 mysql 数据库中。一次做所有事情太多了,所以想分批做 10 000 条记录。Fox Pro SQL中的LIMIT 5、10等价于什么,想要一个select语句

从人数限制 5、10 中选择姓名、地址;

即从第 5 个开始,只返回 10 个结果。在网上环顾四周,他们只提到了 top 显然没有多大用处。

4

8 回答 8

4

看一下RecNo()函数。

于 2009-03-23T12:23:14.190 回答
2

FoxPro 不直接支持 LIMIT 子句。它确实有“TOP nn”,但它只提供给定百分比内的“最顶级记录”,甚至限制返回 32k 条记录(最大)。

您最好将数据转储为 CSV,或者如果这不切实际(由于大小问题),则编写一个小的 FoxPro 脚本自动生成一系列 BEGIN-INSERT(x10000)-COMMIT 语句转储到一系列文本文件。当然,你需要一个 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 回答
1

使用 TOP 子句很容易绕过 LIMIT 子句;如果您想从记录 _start 中提取以从名为 _test 的文件中记录 _finish,您可以执行以下操作:

[VFP]

** 假设 _start <= _finish,如果不是,则会出现顶部子句错误

*

_finish = MIN(RECCOUNT('_test'),_finish)

*

SELECT * FROM (SELECT TOP (_finish - _start + 1) * FROM (SELECT TOP _finish *, RECNO() AS _tempo FROM _test ORDER BY _tempo) xx ORDER BY _tempo DESC) yy ORDER BY _tempo

**

[/VFP]

于 2016-02-10T08:49:24.513 回答
0

几年前,我不得不将 Foxpro 数据库转换为 Mysql。我为解决这个问题所做的就是在 Foxpro 表中添加一个自动递增的 id 列,并将其用作行引用。

那么你可以做类似的事情。

select name, address from people where id >= 5 and id <= 10;

Foxpro sql 文档没有显示任何类似于限制的内容。

于 2009-03-23T12:08:49.717 回答
0

为了扩展 Eyvind 的答案,我将创建一个程序来使用 RecNo() 函数来提取给定范围内的记录,比如 10,000 条记录。

然后,您可以一次以编程方式循环遍历包含 10,000 条记录的大表,并将数据加载到 MySQL 数据库中。

通过使用 RecNO() 函数,您可以确定不会多次插入行,并且能够在数据加载过程中的已知点重新启动。如果您需要停止并重新启动加载过程,这本身就非常方便。

于 2009-04-15T15:35:07.347 回答
0

在这里,根据您的表格进行调整。花了我 2 分钟,我这样做太频繁了。

N1 - 按任何方式分组,并确保你有一个 max(id),你可以使用 recno() 来制作一个,正确排序

N2 - 加入 N1,其中 ID = N1 的 Max Id,显示 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 回答
0

根据返回的行数,如果您使用的是 .NET Framework,您可以通过以下方式偏移/限制获取的 DataTable:

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

请记住添加程序集 System.Data.DataSetExtensions。

于 2016-04-05T12:07:16.273 回答