Выбрать определенную строку из таблицы MySQL

В идеале мне нужен запрос, эквивалентный

select * from customer where row_number() = 3

но это незаконно.

Я не могу использовать автоматическое приращение поля.

row_number () - это строка, которую необходимо выбрать.

Как мне это сделать?

EDIT: Ну, я использую iSql * plus для практики, и использование limit и auto_increment по какой-то причине незаконно. Я закончил создание последовательности и триггера и просто увеличил id на 1 каждый раз, когда там была запись.

6 ответов


можно использовать LIMIT 2,1 вместо WHERE row_number() = 3.

как документация объясняет, первый аргумент указывает смещение первой строки для возврата, а второй-максимальное количество строк для возврата.

имейте в виду, что это индекс на основе 0. Итак, если вы хотите номер строки n, первый аргумент должен быть n-1. Второй аргумент всегда будет 1, потому что вы просто хочу один ряд. Например, если вы хотите номер строки 56 таблицы customer:

SELECT * FROM customer LIMIT 55,1

вы не можете выбрать такую строку. Вы должны указать поле, значения которого будет 3

вот запрос, который будет работать, если поле, которое вы сравниваете с id

select * from customer where `id` = 3

SET @customerID=0;
SELECT @customerID:=@customerID+1 AS customerID
FROM CUSTOMER ;

вы можете получить набор данных из SQL, как это и заполнить его в структуру данных Java (как список), а затем сделать необходимую сортировку там. (возможно, с помощью сопоставимого интерфейса)


вы можете добавить автоматически сгенерированное поле id в таблицу и выбрать по этому id

SELECT * FROM CUSTOMER WHERE CUSTOMER_ID = 3;

таблицы SQL не упорядочены по умолчанию, и запрос n-й строки из неупорядоченного набора строк не имеет смысла, поскольку он может потенциально возвращать другую строку каждый раз, если вы не укажете порядок:

select * from customer order by id where row_number() = 3

(иногда таблицы MySQL отображаются с внутренним порядком, но вы не можете полагаться на это поведение). Тогда вы можете использовать LIMIT offset, row_count, со смещением на основе 0, поэтому номер строки 3 становится смещением 2:

select * from customer order by id
limit 2, 1

или вы можете использовать LIMIT row_count OFFSET offset:

select * from customer order by id
limit 1 offset 2

ваша таблица должна быть создана с уникальным полем ID, которое в идеале будет иметь атрибут AUTO_INCREMENT. пример:

CREATE TABLE Persons
(
P_Id int NOT NULL AUTO_INCREMENT,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
PRIMARY KEY (P_Id)
)

затем вы можете получить доступ к 3-й записи в этой таблице с:

SELECT * FROM Persons WHERE P_Id = 3