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