2010-08-10 54 views
7

Tôi nhận được kết quả lạ từ một bảng mà tôi đang chọn. Hãy xem xét bảng sau:Sql SELECT TOP 1

USERID TICKETSASSIGNED 

1   0 
100  0 
101  0 
102  0 
103  0 

Bây giờ, nếu tôi có sql sau như trong:

SELECT TOP 1 USERID 
    FROM TABLEX 
    ORDER BY TICKETSASSIGNED 

Kết quả tôi mong chờ để nhận được là "1" nhưng hầu hết tất cả thời gian tôi nhận được "100", bản ghi thứ hai. Vì các giá trị TICKETSASSIGNED đều là "0", nó ngẫu nhiên chọn giá trị mà nó nghĩ là TOP 1 vì đây là trường tôi đang đặt hàng. Để có được giá trị đúng của "1" trong trường hợp này, tôi cũng phải đặt hàng trên USERID.

Bất kỳ ý tưởng nào?

+0

khóa chính của bạn là gì? Dữ liệu thực sự có thể được lưu trữ khác với kết quả đang được hiển thị. –

Trả lời

3

Bạn sẽ cần một cột thứ hai trong ORDER BY khoản của bạn trong trường hợp này:

SELECT TOP 1 USERID 
FROM TABLEX 
ORDER BY TICKETSASSIGNED, USERID 

Nếu không có này đó là lẽ đem lại cho bạn các hồ sơ theo yêu cầu của TICKETASSIGNED, sau đó theo vị trí vật lý của họ trong bảng, ví dụ thứ tự chúng được chèn vào trong hầu hết các trường hợp.

0

Nếu bạn đang đặt hàng chỉ bởi TICKETSASSIGNED và tất cả đều có giá trị bằng nhau, không có lý do bất kỳ hồ sơ cụ thể nào phải được trả lại làm giá trị cao nhất. Nếu bạn muốn sử dụng mã hàng đầu bằng cách sử dụng USERID làm trường tiếp theo để đặt hàng trước, thì có, bạn chỉ cần thêm USERID vào đơn hàng của mình theo mệnh đề.

+0

Cảm ơn bạn đã trả lời nhanh. Tất cả làm cho sence. –

8

Kết quả tôi mong đợi nhận được là "1" nhưng hầu hết thời gian tôi nhận được "100", kỷ lục thứ hai. Vì các giá trị TICKETSASSINGED đều là "0", nó ngẫu nhiên chọn giá trị mà nó nghĩ là TOP 1 vì đây là trường tôi đang đặt hàng. Để có được giá trị corredct của "1" trong trường hợp này, tôi cũng phải đặt hàng trên USERID.

Đây là hành vi mặc định trong tất cả các câu lệnh SQL.

Sử dụng:

ORDER BY TICKETSASSIGNED, USERID  
5

Nếu bạn kiểm tra tài liệu cho TOP: TOP (Transact-SQL), đặc biệt là hai đoạn đầu tiên dưới chú thích, nó rõ ràng rằng TOP không đặt mua hàng. Như vậy, thứ tự bạn đã áp đặt chính mình là thứ tự được sử dụng.

Thật không may, đơn đặt hàng của bạn chưa hoàn tất. Nó chỉ xảy ra để sản xuất những gì bạn muốn đôi khi.

Cách chính xác là chính xác những gì bạn đã tìm ra, bạn cũng cần phải đặt hàng bởi USERID.

0

SELECT TOP khoản được sử dụng để xác định số lượng hồ sơ để trở

SELECT * FROM Customers LIMIT 3; 


customerId  CustomerName 
--------------------------- 
1     abc 
2     xyz 
3     mno 
Các vấn đề liên quan