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