Выберите конкретную строку из таблицы mysql
В идеале мне нужен запрос, эквивалентный
select * from customer where row_number() = 3
Но это незаконно.
Я не могу использовать автоматически увеличенное поле.
Row_number () - это строка, которую необходимо выбрать.
Как мне это сделать?
EDIT: Ну, я использую iSql*plus для практики, и использование limit и auto_increment по какой-то причине незаконно. В итоге я создал последовательность и триггер и просто увеличивал идентификатор на 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