2012-05-04 44 views
14

Lý tưởng nhất là tôi cần một truy vấn mà là tương đương vớiChọn hàng cụ thể từ các bảng mysql

select * from customer where row_number() = 3 

nhưng đó là bất hợp pháp.

Tôi không thể sử dụng trường tăng tự động.

row_number() là hàng cần được chọn.

Tôi làm cách nào để thực hiện việc này?

EDIT: Vâng, tôi sử dụng iSql * plus để thực hành và việc sử dụng giới hạn và auto_increment là bất hợp pháp vì một số lý do. Tôi đã kết thúc việc tạo ra một trình tự và kích hoạt và chỉ tăng số điểm lên 1 lần mỗi lần có một mục nhập.

+2

Ý anh là gì bởi 'row_number()'? Hồ sơ không được đặt hàng trong MySQL. Bạn cần xác định dữ liệu mong muốn của mình theo một cách khác, dựa trên nội dung của chúng. – eggyal

+1

@eggyal: Chuẩn ANSI SQL có hàm 'row_number()' (mặc dù sử dụng Marlon sẽ không chính xác) nhưng MySQL không hỗ trợ (như nhiều tính năng SQL hiện đại khác) –

Trả lời

42

Bạn có thể sử dụng LIMIT 2,1 thay vì WHERE row_number() = 3.

Khi số documentation giải thích, đối số đầu tiên chỉ định độ lệch của hàng đầu tiên trả về và số thứ hai chỉ định số hàng tối đa để trả về.

Hãy nhớ rằng đó là chỉ mục dựa trên 0. Vì vậy, nếu bạn muốn số dòng n, đối số đầu tiên phải là n-1. Đối số thứ hai sẽ luôn là , bởi vì bạn chỉ muốn một hàng. Ví dụ, nếu bạn muốn số dòng của một bảng customer:

SELECT * FROM customer LIMIT 55,1 
+0

Bạn có thể cho tôi một ví dụ không? –

+0

LIMIT có liên quan gì đến vấn đề này? – Starx

+0

@Starx Nếu @MarlonBrando muốn chỉ đơn giản là hàng thứ ba của kết quả của mình, không liên quan đến bất kỳ ID kỹ thuật nào, 'LIMIT' là giải pháp. – sp00m

3

Bạn có thể thêm được tự động tạo trường id trong bảng và chọn bởi id này

SELECT * FROM CUSTOMER WHERE CUSTOMER_ID = 3; 
5

Bạn không thể chọn một hàng như thế. Bạn cần phải xác định một lĩnh vực có giá trị sẽ là 3

Dưới đây là một truy vấn mà sẽ làm việc, nếu trường bạn đang so sánh chống lại là id

select * from customer where `id` = 3 
1

bảng của bạn sẽ cần phải được tạo ra với một trường ID duy nhất lý tưởng sẽ có thuộc tính AUTO_INCREMENT. Ví dụ:

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

Sau đó, bạn có thể truy cập kỷ lục thứ 3 trong bảng này với:

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

bạn có thể lấy số liệu từ SQL như thế này và cư nó thành một cấu trúc dữ liệu java (như một Danh sách) và sau đó thực hiện phân loại cần thiết ở đó.(có thể với sự trợ giúp của một giao diện tương đương)

1

Bảng SQL không được sắp xếp theo mặc định và yêu cầu hàng thứ n từ một tập hợp các hàng không có thứ tự không có nghĩa là nó có khả năng trả về một hàng khác nhau mỗi lần trừ khi bạn chỉ định ORDER BY:

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

(đôi khi bảng MySQL được hiển thị theo thứ tự nội bộ nhưng bạn không thể dựa vào hành vi này). Sau đó, bạn có thể sử dụng LIMIT offset, row_count với 0 dựa trên offset để chèo số 3 trở nên bù đắp 2:

select * from customer order by id 
limit 2, 1 

hoặc bạn có thể sử dụng LIMIT row_count OFFSET offset:

select * from customer order by id 
limit 1 offset 2 
Các vấn đề liên quan