2012-05-04 28 views
14

Lo ideal sería que necesito una consulta que es equivalente aSeleccionar fila específica de la tabla de MySQL

select * from customer where row_number() = 3 

pero eso es ilegal.

No puedo usar un campo auto incrementado.

row_number() es la fila que debe seleccionarse.

¿Cómo puedo hacer esto?

EDITAR: Bueno, uso iSql * plus para practicar, y el uso de limit y auto_increment es ilegal por alguna razón. Terminé creando una secuencia y un desencadenante, y simplemente aumenté el id por 1 cada vez que había una entrada.

+2

¿Qué quiere decir con 'row_number()'? Los registros no están ordenados en MySQL. Necesita identificar los datos deseados de alguna otra forma, en función de su contenido. – eggyal

+1

@eggyal: Estándar ANSI SQL tiene una función 'row_number()' (aunque el uso de Marlon sería incorrecto) pero MySQL no es compatible con eso (como tantas otras funciones SQL modernas) –

Respuesta

42

Se puede utilizar en lugar de LIMIT 2,1WHERE row_number() = 3.

A medida que el documentation explica, el primer argumento especifica el desplazamiento de la primera fila para volver, y el segundo especifica el número máximo de filas para volver.

Tenga en cuenta que es un índice basado en 0. Por lo tanto, si desea el número de línea n, el primer argumento debe ser n-1. El segundo argumento siempre será , porque solo quiere una fila. Por ejemplo, si desea que el número de la línea 56 de una mesa customer:

SELECT * FROM customer LIMIT 55,1 
+0

¿Me puede dar un ejemplo? –

+0

¿Qué tiene que ver LIMIT con este problema? – Starx

+0

@Starx Si @MarlonBrando quiere simplemente la tercera fila de su resultado, sin considerar ninguna ID técnica, 'LIMIT' es la solución. – sp00m

3

Se puede añadir un auto generada campo id de la tabla y seleccione en este id

SELECT * FROM CUSTOMER WHERE CUSTOMER_ID = 3; 
5

No se puede seleccionar una fila de esa manera. Tiene que especificar un campo cuyos valores será de 3

Aquí es una consulta que va a funcionar, si el campo está comparando contra es id

select * from customer where `id` = 3 
1

tendrá que ser creado con un Su mesa campo ID único que idealmente tendrá el atributo AUTO_INCREMENT. ejemplo:

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

A continuación, puede acceder a la tercera registro en esta tabla con:

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

se puede obtener el conjunto de datos de SQL como esto y poblarlo en una estructura de datos de Java (como a List) y luego hacer la clasificación necesaria allí.(tal vez con la ayuda de una interfaz similar)

1

Las tablas SQL no están ordenadas por defecto, y pedir la n-ésima fila de un conjunto de filas no ordenadas no tiene ningún significado ya que podría devolver una fila diferente cada vez a menos que especifique un ORDER BY:

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

(a veces las tablas de MySQL se muestran con un orden interno, pero no se puede confiar en este comportamiento). A continuación, puede utilizar LIMIT offset, row_count, con un 0-basa compensar así la fila número 3 resulta desplazada 2:

select * from customer order by id 
limit 2, 1 

o puede utilizar LIMIT row_count OFFSET offset:

select * from customer order by id 
limit 1 offset 2 
Cuestiones relacionadas