Seleziona una riga specifica dalla tabella mysql

Idealmente ho bisogno di una query che è equivalente a

select * from customer where row_number() = 3 

ma questo è illegale.

Non riesco a utilizzare un campo auto incrementato.

row_number () è la riga che deve essere selezionata.

Come faccio a fare questo?

EDIT: Beh, io uso iSql * plus per esercitarmi, e l’uso di limit e auto_increment è illegale per qualche motivo. Ho finito per creare una sequenza e un trigger e ho alzato l’id di 1 ogni volta che c’era una voce.

È ansible utilizzare LIMIT 2,1 anziché WHERE row_number() = 3 .

Come spiega la documentazione , il primo argomento specifica l’offset della prima riga da restituire e il secondo specifica il numero massimo di righe da restituire .

Tieni presente che si tratta di un indice a 0. Quindi, se vuoi il numero di riga n , il primo argomento dovrebbe essere n-1 . Il secondo argomento sarà sempre 1 , perché vuoi solo una riga. Ad esempio, se si desidera il numero di riga 56 di un customer di una tabella:

 SELECT * FROM customer LIMIT 55,1 

Non è ansible selezionare una riga del genere. Devi specificare un campo i cui valori saranno 3

Ecco una query che funzionerà, se il campo a cui stai confrontando è id

 select * from customer where `id` = 3 
 SET @customerID=0; SELECT @customerID:[email protected]+1 AS customerID FROM CUSTOMER ; 

è ansible ottenere il set di dati da SQL come questo e popolarlo in una struttura dati java (come un elenco) e quindi effettuare l’ordinamento necessario laggiù. (forse con l’aiuto di un’interfaccia comparabile)

È ansible aggiungere un campo ID generato automaticamente nella tabella e selezionare con questo ID

 SELECT * FROM CUSTOMER WHERE CUSTOMER_ID = 3; 

Le tabelle SQL non sono ordinate per impostazione predefinita e richiedere la n-esima riga da un gruppo di righe non ordinato non ha alcun significato in quanto potrebbe potenzialmente restituire una riga diversa ogni volta, a meno che non si specifichi un ORDER BY:

 select * from customer order by id where row_number() = 3 

(a volte le tabelle MySQL sono mostrate con un ordine interno ma non puoi fare affidamento su questo comportamento). Quindi puoi utilizzare LIMIT offset, row_count , con un offset a 0 in modo che la riga numero 3 diventi offset 2:

 select * from customer order by id limit 2, 1 

oppure puoi utilizzare LIMIT row_count OFFSET offset :

 select * from customer order by id limit 1 offset 2 

La tabella dovrà essere creata con un campo ID univoco che avrà idealmente l’attributo AUTO_INCREMENT. esempio:

 CREATE TABLE Persons ( P_Id int NOT NULL AUTO_INCREMENT, LastName varchar(255) NOT NULL, FirstName varchar(255), PRIMARY KEY (P_Id) ) 

Quindi puoi accedere al terzo record in questa tabella con:

 SELECT * FROM Persons WHERE P_Id = 3