Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Cara Memperbaiki "Hanya satu ekspresi yang dapat ditentukan dalam daftar pilih ..." di SQL Server

Di SQL Server, pesan galat 116 terjadi saat Anda mencoba memilih beberapa kolom dalam subkueri tanpa memasukkannya dengan EXISTS operator.

Kesalahan lengkapnya terlihat seperti ini:

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.

Contoh

Berikut adalah contoh kueri yang menghasilkan kesalahan ini.

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

Hasil:

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.

Masalah dengan kueri ini adalah bahwa subkueri menggunakan tanda bintang (* ) untuk memilih semua kolom dari Dogs meja. Tabel tersebut memiliki beberapa kolom, sehingga terjadi kesalahan.

Cara Memperbaiki Kesalahan

Kami dapat memperbaiki kesalahan di atas dengan beberapa cara.

Salah satu cara untuk memperbaikinya adalah dengan mengganti tanda bintang (* ) dengan satu nama kolom di subquery:

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

Ini berarti bahwa subquery sekarang mengembalikan hanya satu kolom, bukan semua kolom dalam tabel.

Cara lain untuk memperbaikinya, adalah melakukan apa yang disarankan oleh pesan kesalahan dan menggunakan EXISTS operator alih-alih IN .

Melakukan hal ini memerlukan sedikit variasi dalam konstruksi kueri:

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

Seperti yang Anda harapkan, EXISTS operator juga akan berfungsi meskipun Anda hanya menyatakan satu kolom secara eksplisit:

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

Namun berbeda dengan IN operator, EXISTS juga akan berfungsi jika Anda secara eksplisit memilih beberapa nama kolom di subkueri:

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. Nilai kolom identitas tiba-tiba melompat ke 1001 di server sql

  2. Apakah ada hit kinerja yang parah untuk menggunakan Kunci Asing di SQL Server?

  3. Bagaimana cara membuat fungsi SQL Server untuk menggabungkan beberapa baris dari subquery ke dalam satu bidang yang dibatasi?

  4. Ekspresi reguler di dalam SQL Server

  5. Apa perbedaan antara tabel temp dan variabel tabel di SQL Server?