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.

18
demandé sur Matt O'Brien 2012-05-05 03:41:49

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
48
répondu sp00m 2015-07-06 07:15:54

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
5
répondu Starx 2012-05-04 23:48:17
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)

4
répondu Sanath 2012-05-04 23:54:22

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;
2
répondu user1135357 2012-05-04 23:45:49

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
2
répondu fthiella 2017-06-22 05:00:39

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
1
répondu Luminous_Path 2012-05-04 23:53:25