MySQL:如何选择表中除最后一行之外的所有行

12

我有一张有N行的表格,我想选择其中N-1行。

如果可能的话,请提供如何在一个查询中完成此操作的建议..?


这个问题的通用版本是:SQL选择表中除了最后一行之外的所有行? - starball
这个问题的通用版本是:SQL选择表中除最后一行之外的所有行? - undefined
5个回答

25

最后一行是否具有最高的ID?如果是这样,我认为这会起作用:

SELECT * FROM TABLE WHERE ID != (SELECT MAX(ID) FROM TABLE)

当前版本的MySQL确实允许使用子查询,对吗?

然而,在大多数情况下,如果您选择所有行并在应用程序中过滤掉不需要的数据,可能会提高性能。


MySQL 4.1已经支持子查询超过四年了!尽管有些托管公司仍在使用缺乏此功能的MySQL 4.0。 - Bill Karwin
嘿,我也是这么想的。但上次我使用MySQL还是3.X版本,像这样的东西就不能用了。现在大多数时候都使用MS SQL Server。 - Joshua Carmody

4

这里没有列出的另一种技术是

SELECT * FROM table ORDER BY id DESC LIMIT 10000 OFFSET 1;

这将按ID降序为您提供记录,除了第一个(即原始顺序中的最后一个)。
请注意,使用此方法,您仅会获取10000条记录,但是这个数字可以尽可能高,但不能省略。
该方法的优点在于您可以按任何想要的方式排序。
缺点是它会按照从后往前的顺序提供记录。
最后值得注意的是,这里的其他方法也很好用。

2

SELECT DISTINCT t1.columns FROM table t1
INNER JOIN table t2 ON t1.id < t2.id

根据我的经验,MySQL非常喜欢这种技巧,这个技巧已经被使用了好几个版本。


我相信你忘记在其中加上DISTINCT。 - LeppyR64

0
你必须先声明一个变量,然后再设置它。通过使用LIMIT,你可以找到前n-1行。
就像这样:
DECLARE rowsNr INT DEFAULT 0;  
SET rowsNr = SELECT (count(*) AS 'TOTAL_ROWS' FROM TABLE;
SET rowsNr = rowsNr -1;
SELECT * FROM Table WHERE ... LIMIT rowsNr;

如果普通查询无法正常工作,尝试将其放置在存储过程中。

-3

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接