我有一个有 N 行的表,我想选择 N-1 行。
如果可能的话,关于如何在一个查询中执行此操作的建议..?
最后一行是否具有最高 ID?如果是这样,我认为这会起作用:
SELECT * FROM TABLE WHERE ID != (SELECT MAX(ID) FROM TABLE)
MySQL 在当前版本中确实允许子选择,对吧?
但是,在大多数情况下,如果您选择所有行然后在应用程序中过滤掉不需要的数据,它可能会执行得更好。
我在这里没有看到的另一种技术是
SELECT * FROM table ORDER BY id DESC LIMIT 10000 OFFSET 1;
这将为您提供按 id descendant 排序的记录,除了第一个,即原始顺序中的最后一个。
请注意,使用此方法您只会获取 10000 条记录,但是此数字可以任意高,但不能省略。
这种方法的优点是您可以随意订购。
缺点是它为您提供了从最后到第一个排序的记录。
最后值得注意的是,这里的其他方法效果很好
SELECT DISTINCT t1.columns FROM table t1
INNER JOIN table t2 ON t1.id < t2.id
根据我的经验,MySQL 喜欢这种技术,可以追溯到几个版本。
另一种方法可能是:
SELECT * FROM table WHERE ID <> LAST_INSERT_ID()
参考:http ://dev.mysql.com/doc/refman/5.7/en/getting-unique-id.html