Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Как да коригирате „В списъка за избор може да бъде посочен само един израз…“ в SQL Server

В SQL Server съобщение за грешка 116 се появява, когато се опитате да изберете няколко колони в подзаявка, без да я въвеждате с EXISTS оператор.

Пълната грешка изглежда така:

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.

Пример

Ето пример за заявка, която произвежда тази грешка.

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

Резултат:

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.

Проблемът с тази заявка е, че подзаявката използва звездичка (* ), за да изберете всички колони от Dogs маса. Тази таблица има множество колони и така се получава грешката.

Как да поправя грешката

Можем да коригираме горната грешка по няколко начина.

Един от начините да го поправите е да замените звездичката (* ) с едно име на колона в подзаявката:

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

Това означава, че подзаявката вече връща само една колона вместо всички колони в таблицата.

Друг начин да го поправите е да направите това, което предлага съобщението за грешка и да използвате EXISTS оператор вместо IN .

Това изисква лека промяна в конструкцията на заявката:

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

Както може да очаквате, EXISTS операторът също ще работи, дори ако изрично посочите само една колона:

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

Но за разлика от IN оператор, EXISTS също ще работи, ако изрично изберете множество имена на колони в подзаявката:

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. Оптимизация на SQL заявки – Как да определите кога и дали е необходимо

  2. Преименувайте първичен ключ в SQL Server (T-SQL)

  3. Задействане за вмъкване на актуализация как да определите дали вмъкване или актуализиране

  4. ISJSON() Примери в SQL Server (T-SQL)

  5. Урок за SQL Server – Всичко, от което се нуждаете, за да овладеете Transact-SQL