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


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

select * from customer where row_number() = 3
Но это незаконно.

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

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

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

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

6 18

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