Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Cách khắc phục “Chỉ có thể chỉ định một biểu thức trong danh sách chọn…” trong SQL Server

Trong SQL Server, thông báo lỗi 116 xảy ra khi bạn cố gắng chọn nhiều cột trong một truy vấn con mà không giới thiệu nó với EXISTS nhà điều hành.

Toàn bộ lỗi trông như thế này:

Msg 116, Level 16, State 1, Line 5
Only one expression can be specified in the select list when the subquery is not introduced with EXISTS.

Ví dụ

Dưới đây là ví dụ về truy vấn tạo ra lỗi này.

SELECT 
    CatId,
    CatName
FROM Cats c 
WHERE c.CatName IN (SELECT * FROM Dogs);

Kết quả:

Msg 116, Level 16, State 1, Line 5
Only one expression can be specified in the select list when the subquery is not introduced with EXISTS.

Vấn đề với truy vấn này là truy vấn con sử dụng dấu hoa thị (* ) để chọn tất cả các cột từ Dogs bàn. Bảng đó có nhiều cột và do đó lỗi được tạo ra.

Cách sửa lỗi

Chúng tôi có thể sửa lỗi trên bằng một số cách.

Một cách để khắc phục là thay thế dấu hoa thị (* ) với một tên cột trong truy vấn con:

SELECT 
    CatId,
    CatName
FROM Cats c 
WHERE c.CatName IN (SELECT DogName FROM Dogs);

Điều này có nghĩa là truy vấn con bây giờ chỉ trả về một cột thay vì tất cả các cột trong bảng.

Một cách khác để khắc phục nó, là thực hiện những gì thông báo lỗi gợi ý và sử dụng EXISTS toán tử thay vì IN .

Thực hiện điều này yêu cầu một chút thay đổi trong cấu trúc truy vấn:

SELECT 
    CatId,
    CatName
FROM Cats c 
WHERE EXISTS (SELECT * FROM Dogs d
WHERE c.CatName = d.DogName);

Như bạn có thể mong đợi, EXISTS toán tử cũng sẽ hoạt động ngay cả khi bạn chỉ nêu rõ ràng một cột:

SELECT 
    CatId,
    CatName
FROM Cats c 
WHERE EXISTS (SELECT DogName FROM Dogs d
WHERE c.CatName = d.DogName);

Nhưng ngược lại với IN toán tử, EXISTS cũng sẽ hoạt động nếu bạn chọn rõ ràng nhiều tên cột trong truy vấn con:

SELECT 
    CatId,
    CatName
FROM Cats c 
WHERE EXISTS (SELECT DogId, DogName FROM Dogs d
WHERE c.CatName = d.DogName);


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách tốt nhất để kiểm tra kết nối SQL Server theo chương trình là gì?

  2. Sử dụng NEWSEQUENTIALID () để tạo HƯỚNG DẪN Tăng dần trong SQL Server

  3. Truyền tham số cho SQL là gì và tại sao tôi cần nó?

  4. SQL Server:Sự khác biệt giữa CROSS JOIN và FULL OUTER JOIN là gì?

  5. Nhóm SQL BY, N mục hàng đầu cho mỗi Nhóm