web-dev-qa-db-fra.com

Sélectionnez une ligne spécifique dans la table mysql

Idéalement, j'ai besoin d'une requête équivalente à

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ée.

Comment dois-je procéder?

EDIT: Eh bien, j'utilise iSql * plus pour m'entraîner, et l'utilisation de limit et auto_increment est illégale pour une raison quelconque. J'ai fini par créer une séquence et un déclencheur et j'ai juste augmenté l'identifiant de 1 à chaque fois qu'il y avait une entrée.

24
Nu Gnoj Mik

Vous pouvez utiliser LIMIT 2,1 Au lieu de WHERE row_number() = 3.

Comme l'explique documentation , 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 qu'il s'agit d'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 , car vous ne voulez qu'une seule ligne. Par exemple, si vous voulez le numéro de ligne 56 d'une table customer:

SELECT * FROM customer LIMIT 55,1
61
sp00m

Vous ne pouvez pas sélectionner une ligne comme ça. Vous devez spécifier un champ dont les valeurs seront

Voici une requête qui fonctionnera, si le champ que vous comparez est id

select * from customer where `id` = 3
4
Starx
SET @customerID=0;
SELECT @customerID:=@customerID+1 AS customerID
FROM CUSTOMER ;

vous pouvez obtenir l'ensemble de données de SQL comme ceci et le remplir dans une structure de données Java (comme une liste), puis effectuer le tri nécessaire là-bas. (peut-être à l'aide d'une interface comparable)

4
Sanath

Les tables SQL ne sont pas ordonnées par défaut, et demander la n-ième ligne d'un ensemble de lignes non ordonnées n'a aucune signification car elle pourrait potentiellement renvoyer une ligne différente à chaque fois sauf si vous spécifiez un ORDER BY:

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 décalage basé sur 0 pour que la ligne numéro 3 devienne le décalage 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
1
fthiella

Vous pouvez ajouter un champ d'identification généré automatiquement dans le tableau et sélectionner par cet identifiant

SELECT * FROM CUSTOMER WHERE CUSTOMER_ID = 3;
1
duncanportelli

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)
)

Ensuite, vous pouvez accéder au 3ème enregistrement de ce tableau avec:

SELECT * FROM Persons WHERE P_Id = 3
1
Luminous_Path