Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Jak naprawić „Tylko jedno wyrażenie można określić na liście wyboru…” w SQL Server

W SQL Server komunikat o błędzie 116 pojawia się podczas próby wybrania wielu kolumn w podzapytaniu bez wprowadzania go z EXISTS operatora.

Pełny błąd wygląda tak:

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.

Przykład

Oto przykład zapytania, które powoduje ten błąd.

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

Wynik:

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.

Problem z tym zapytaniem polega na tym, że podzapytanie używa gwiazdki (* ), aby wybrać wszystkie kolumny z Dogs stół. Ta tabela ma wiele kolumn, więc pojawia się błąd.

Jak naprawić błąd

Powyższy błąd możemy naprawić na kilka sposobów.

Jednym ze sposobów, aby to naprawić, jest zastąpienie gwiazdki (* ) z nazwą pojedynczej kolumny w podzapytaniu:

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

Oznacza to, że podzapytanie zwraca teraz tylko jedną kolumnę zamiast wszystkich kolumn w tabeli.

Innym sposobem, aby to naprawić, jest zrobienie tego, co sugeruje komunikat o błędzie i użycie EXISTS operator zamiast IN .

Wykonanie tego wymaga niewielkich zmian w konstrukcji zapytania:

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

Jak można się spodziewać, EXISTS operator również zadziała, nawet jeśli wyraźnie określisz tylko jedną kolumnę:

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

Ale w przeciwieństwie do IN operator, EXISTS zadziała również, jeśli wyraźnie wybierzesz wiele nazw kolumn w podzapytaniu:

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. POKAŻ BAZY DANYCH Odpowiednik w SQL Server – sp_databases

  2. Jak określić nazwę klucza podstawowego w EF-Code-First?

  3. Czy istnieją zagrożenia bezpieczeństwa związane z monitorowaniem w chmurze Spotlight?

  4. Co to jest schemat w programie SQL Server i jak utworzyć/upuścić schemat w bazie danych programu SQL Server — samouczek SQL Server / TSQL, część 27

  5. Sprawdź, czy wiersz istnieje, w przeciwnym razie wstaw