2012-05-04 18 views
14

Idealmente ho bisogno di una query che è equivalente aSeleziona riga specifica dalla tabella mysql

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: Bene, io uso iSql * plus per esercitarmi, e l'utilizzo di limite 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.

+2

Che cosa si intende per 'row_number()'? I record non sono ordinati in MySQL. È necessario identificare i dati desiderati in un altro modo, in base al loro contenuto. – eggyal

+1

@eggyal: SQL ANSI standard ha una funzione 'row_number()' (sebbene l'utilizzo di Marlon non sia corretto) ma MySQL non supporta questo (come molte altre funzionalità di SQL moderne) –

risposta

42

È possibile utilizzare al posto di LIMIT 2,1WHERE row_number() = 3.

Come documentation spiega, il primo argomento specifica l'offset della prima fila di ritorno, e la seconda specifica il numero massimo di righe da restituire.

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

SELECT * FROM customer LIMIT 55,1 
+0

Puoi fornirmi un esempio? –

+0

Cosa c'entra LIMIT con questo problema? – Starx

+0

@Starx Se @MarlonBrando vuole semplicemente la terza riga del suo risultato, non riguardo ad alcun ID tecnico, 'LIMIT' è la soluzione. – sp00m

3

È possibile aggiungere un auto generato campo id nella tabella e selezionare da questo id

SELECT * FROM CUSTOMER WHERE CUSTOMER_ID = 3; 
5

Non è possibile selezionare una riga del genere. È necessario specificare un campo i cui valori saranno 3

Ecco una query che funziona, se il campo si confrontano contro è id

select * from customer where `id` = 3 
1

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 è possibile accedere al 3 ° record di questa tabella con:

SELECT * FROM Persons WHERE P_Id = 3 
4
SET @customerID=0; 
SELECT @customerID:[email protected]+1 AS customerID 
FROM CUSTOMER ; 

è possibile ottenere il set di dati da SQL come questo e popolare in una struttura di dati java (come una lista) e quindi effettuare l'ordinamento necessario laggiù.(forse con l'aiuto di un'interfaccia comparabile)

1

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

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

(a volte le tabelle di MySQL sono mostrati con un ordine interno ma non si può fare affidamento su questo comportamento). Quindi è possibile utilizzare LIMIT offset, row_count, con uno 0 a base di offset in modo riga numero 3 viene compensata 2:

select * from customer order by id 
limit 2, 1 

oppure è possibile utilizzare LIMIT row_count OFFSET offset:

select * from customer order by id 
limit 1 offset 2 
Problemi correlati