11

我有一个有 N 行的表,我想选择 N-1 行。

如果可能的话,关于如何在一个查询中执行此操作的建议..?

4

4 回答 4

22

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

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

MySQL 在当前版本中确实允许子选择,对吧?

但是,在大多数情况下,如果您选择所有行然后在应用程序中过滤掉不需要的数据,它可能会执行得更好。

于 2008-11-24T21:52:12.557 回答
3

我在这里没有看到的另一种技术是

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

这将为您提供按 id descendant 排序的记录,除了第一个,即原始顺序中的最后一个。
请注意,使用此方法您只会获取 10000 条记录,但是此数字可以任意高,但不能省略。
这种方法的优点是您可以随意订购。
缺点是它为您提供了从最后到第一个排序的记录。
最后值得注意的是,这里的其他方法效果很好

于 2016-08-09T17:45:37.777 回答
2

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

根据我的经验,MySQL 喜欢这种技术,可以追溯到几个版本。

于 2008-11-24T21:54:33.100 回答
-3

另一种方法可能是:

SELECT * FROM table WHERE ID <> LAST_INSERT_ID()

参考:http ://dev.mysql.com/doc/refman/5.7/en/getting-unique-id.html

于 2016-08-09T17:57:13.013 回答