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

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

select * from customer where row_number() = 3

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

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

row_number() - это строка, которая должна быть выбрана.

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

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

Ответы

Ответ 1

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

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

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

SELECT * FROM customer LIMIT 55,1

Ответ 2

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

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

select * from customer where `id` = 3

Ответ 3

SET @customerID=0;
SELECT @customerID:[email protected]+1 AS customerID
FROM CUSTOMER ;

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

Ответ 4

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

SELECT * FROM CUSTOMER WHERE CUSTOMER_ID = 3;

Ответ 5

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

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

Затем вы можете получить доступ к третьей записи в этой таблице с помощью:

SELECT * FROM Persons WHERE P_Id = 3

Ответ 6

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

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