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