Выбрать определенную строку из таблицы 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