MySQL: как выбрать все строки из таблицы, кроме последней - PullRequest
9 голосов
/ 25 ноября 2008

У меня есть таблица с N строками, и я хочу выбрать N-1 рядов.

Предложения о том, как сделать это в одном запросе, если это возможно ..?

Ответы [ 4 ]

15 голосов
/ 25 ноября 2008

У последней строки самый высокий идентификатор? Если так, думаю, это сработает:

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

MySQL разрешает выборки в текущей версии, верно?

Однако в большинстве случаев было бы лучше работать, если бы вы выбрали все строки, а затем отфильтровали нежелательные данные в вашем приложении.

2 голосов
/ 25 ноября 2008

SELECT DISTINCT t1.columns ОТ таблицы t1
ВНУТРЕННЕЕ СОЕДИНЕНИЕ таблица t2 ON t1.id

По моему опыту, MySQL любит эту технику, возвращаясь к нескольким версиям.

1 голос
/ 09 августа 2016

Другая техника, которую я здесь не вижу, это

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

Это даст вам записи, упорядоченные потомком id, кроме первого, то есть, кроме последнего в исходном порядке.
Обратите внимание, что с помощью этого метода вы будете принимать только 10000 записей, однако это число может быть настолько большим, насколько вы хотите, но не может быть опущено. Преимущество этого метода в том, что вы можете заказать все, что захотите.
Недостаток заключается в том, что он дает вам записи, упорядоченные от последней к первой.
Наконец, стоит отметить, что другие методы здесь работают довольно хорошо

0 голосов
/ 09 августа 2016

Другой способ сделать это может быть:

SELECT * FROM table WHERE ID <> LAST_INSERT_ID()

Ссылка: http://dev.mysql.com/doc/refman/5.7/en/getting-unique-id.html

...