Nếu bạn đang chạy một truy vấn trong SQL Server và gặp lỗi sau…
Các mụcMsg 104, Level 16, State 1, Line 8
ORDER BY items must appear in the select list if the statement contains a UNION, INTERSECT or EXCEPT operator.
… Bạn nên kiểm tra câu lệnh SQL của mình - có thể bạn đã bỏ qua một cột khỏi SELECT của mình danh sách.
Như thông báo lỗi ngụ ý, bạn có thể sẽ chỉ thấy lỗi này nếu bạn đang chạy truy vấn có chứa UNION , INTERSECT hoặc EXCEPT nhà điều hành.
Chỉ cần thêm cột vào SELECT của bạn danh sách sẽ khắc phục sự cố.
Ví dụ
Đây là một ví dụ về việc tạo ra lỗi.
SELECT
CatName
FROM Cats
UNION ALL
SELECT
DogName
FROM Dogs
ORDER BY CatId; Kết quả:
Các mụcMsg 104, Level 16, State 1, Line 8 ORDER BY items must appear in the select list if the statement contains a UNION, INTERSECT or EXCEPT operator.
Vấn đề ở đây là tôi đang cố gắng đặt hàng theo CatId nhưng tôi không thực sự chọn cột đó trong SELECT của mình danh sách.
Cách dễ nhất để khắc phục điều này là thêm cột đó vào SELECT của tôi danh sách.
SELECT
CatId AS PetID,
CatName AS PetName
FROM Cats
UNION ALL
SELECT
DogId AS PetID,
DogName AS PetName
FROM Dogs
ORDER BY PetId; Kết quả:
+---------+-----------+ | PetID | PetName | |---------+-----------| | 1 | Brush | | 1 | Yelp | | 2 | Scarcat | | 2 | Woofer | | 3 | Flutter | +---------+-----------+
Trên thực tế, trong trường hợp của tôi, tôi đang chọn các cột có tên khác nhau (CatId so với DogId , CatName so với DogName ), vì vậy tôi quyết định sử dụng bí danh cho các cột đó (PetId và PetName ). Trong trường hợp này, tôi có thể ORDER BY tên bí danh (PetId ).