我有一个包含 25000 行的 MySQL 表。
这是一个导入的 CSV 文件,因此我想查看最后十行以确保它导入了所有内容。
但是,由于没有ID栏,所以我不能说:
SELECT * FROM big_table ORDER BY id DESC
什么 SQL 语句会显示该表的最后 10 行?
表格的结构很简单:
columns are: A, B, C, D, ..., AA, AB, AC, ... (like Excel)
all fields are of type TEXT
这里的所有答案都更好,但以防万一...... 有一种方法可以获取最后添加的 10 条记录。 (你这很不可靠:))仍然 你可以做类似的事情
SELECT * FROM table LIMIT 10 OFFSET N-10
N - 应该是表中的总行数(SELECT count(*) FROM table)。 您可以使用准备好的查询将其放入单个查询中,但我不会深入讨论。
从表中选择,使用 ORDER BY __ DESC 以相反顺序排序,然后将结果限制为 10 个。
SELECT * FROM big_table ORDER BY A DESC LIMIT 10
SQL 表没有隐式排序,顺序必须来自数据。 也许您应该向表中添加一个字段(例如 int 计数器)并重新导入数据。
但是,这只会给出导入的顺序,而不给出数据。如果您的数据没有顺序,您必须了解如何添加它。
编辑:你说
...确保它导入了所有内容。
使用行计数有什么问题?
您可以使用
ORDER BY DESC
选项,然后将其放回原来的顺序:
(SELECT * FROM tablename ORDER BY id DESC LIMIT 10) ORDER BY id;
SELECT * FROM big_table ORDER BY A DESC LIMIT 10
如果您正在执行
LOAD DATA INFILE 'myfile.csv'
操作,查看是否所有行都已进入的最简单方法是检查 show warnings();
如果您将数据加载到空表或临时表中,您还可以检查插入后就有了。
如果您还没有尝试过以下命令
SELECT TOP 10 * FROM big_table ORDER BY id DESC;
当我执行命令时,我看到它正在工作
SELECT TOP 10 * FROM Customers ORDER BY CustomerId DESC;
的命令窗口
这可以使用 limit 函数来完成,这可能看起来不新鲜,但我添加了一些东西。代码应该是:
SELECT * FROM table_name LIMIT 100,10;
对于上述情况,假设表中有 110 行,并且要选择最后十行,100 是要开始打印的行(如果要打印),十显示要打印的行数从表中挑选。 为了更精确的方式,您可以首先选择要打印的所有行,然后如果您有 id 列(我建议您放置一个),则获取最后一行 id,然后从最后一个 id 数字中减去 10,这将是你想要开始的地方,这将使你的程序能够自主运行并处理任意数量的行,但是如果你直接写入值,我认为你每次将数据插入表中时都必须更改代码。我认为这有帮助。Pax et Bonum。
对大数据执行 count(*) 查询的成本很高。我想用
SELECT *
FROM TABLE
ORDER BY id DESC LIMIT n
其中
n
是每页的行数更好更轻
您可以使用代码从表末尾选择 10 行。 select * from (SELECT * FROM table1 order by id desc LIMIT 10) as table2 order by id"
如果您知道需要多少行,我会在您的数据库中创建一个具有预期结构的单独临时表,追加到其中,然后检查计数...一旦您熟悉了这一点,那么您就可以在之前处理该数据将其附加到您的最终生产表中。
低技术含量的方法:使用 SQL 执行此操作可能有些过大。根据您的问题,您只需要对导入进行一次性验证即可。
为什么不直接做:SELECT * FROM ImportTable
然后滚动到结果网格的底部并目视验证“最后”几行。
如果您想从 sql 中检索最后 10 条记录,请使用 LIMIT。 假设数据库包含20条记录。使用以下查询
SELECT * FROM TABLE_NAME LIMIT 10,20;
其中 10,20 是偏移值。其中 10 表示起始限制,20 表示结束限制。
即 20 -10=10 条记录
从表中选择 *,其中 id >(从表中选择 max(id))- 10