Sélectionner une ligne spécifique dans la table mysql
Idéalement, j'ai besoin d'une requête qui est équivalent à
select * from customer where row_number() = 3
mais c'est illégal.
Je ne peux pas utiliser un champ incrémenté automatiquement.
row_number() est la ligne qui doit être sélectionné.
Comment puis-je aller à ce sujet?
EDIT: Eh bien, j'utilise iSql*plus pour pratiquer, et utiliser limit et auto_ incrément est illégal pour une raison quelconque. J'ai fini par créer une séquence et un déclencheur et j'ai juste augmenté l'id de 1 à chaque fois qu'il y avait entrée.
6 réponses
Vous pouvez utiliser LIMIT 2,1
au lieu de WHERE row_number() = 3
.
documentation explique, le premier argument spécifie le décalage de la première ligne à retourner, et le second spécifie le nombre maximum de lignes à retourner.
Gardez à l'esprit que c'est un index basé sur 0. Donc, si vous voulez le numéro de ligne n le premier argument doit être n-1. Le deuxième argument sera toujours 1, parce que vous venez voulez une ligne. Par exemple, si vous voulez le numéro de ligne 56 d'une table customer
:
SELECT * FROM customer LIMIT 55,1
Vous ne pouvez pas sélectionner une ligne comme ça. Vous devez spécifier un champ dont les valeurs 3
Voici une requête qui fonctionnera, si le champ que vous comparez est id
select * from customer where `id` = 3
SET @customerID=0;
SELECT @customerID:=@customerID+1 AS customerID
FROM CUSTOMER ;
Vous pouvez obtenir L'ensemble de données à partir de SQL comme ceci et le remplir dans une structure de données java (comme une liste) et ensuite faire le tri nécessaire là-bas. (peut-être avec l'aide d'une interface comparable)
Vous pouvez ajouter un champ id généré automatiquement dans la table et sélectionner par cet id
SELECT * FROM CUSTOMER WHERE CUSTOMER_ID = 3;
tables SQL ne sont pas commandés par défaut, et en demandant le n-ième ligne à partir d'un non ensemble ordonné de lignes n'a pas de sens car il pourrait peut-être retourner à une ligne différente à chaque fois, sauf si vous spécifiez une COMMANDE PAR:
select * from customer order by id where row_number() = 3
(parfois les tables MySQL sont affichées avec un ordre interne mais vous ne pouvez pas vous fier à ce comportement). Ensuite, vous pouvez utiliser LIMIT offset, row_count
, avec un offset 0 basé sur donc la ligne 3 devient offset 2:
select * from customer order by id
limit 2, 1
ou vous pouvez utiliser LIMIT row_count OFFSET offset
:
select * from customer order by id
limit 1 offset 2
votre table devra être créée avec un champ ID unique qui aura idéalement L'attribut AUTO_ increment. exemple:
CREATE TABLE Persons
(
P_Id int NOT NULL AUTO_INCREMENT,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
PRIMARY KEY (P_Id)
)
alors vous pouvez accéder au 3ème enregistrement dans ce tableau avec:
SELECT * FROM Persons WHERE P_Id = 3