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
).