sql >> Databasteknik >  >> RDS >> Sqlserver

Så här fixar du "Endast ett uttryck kan anges i urvalslistan..." i SQL Server

I SQL Server uppstår felmeddelande 116 när du försöker välja flera kolumner i en underfråga utan att införa den med koden EXISTS operatör.

Hela felet ser ut så här:

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.

Exempel

Här är ett exempel på en fråga som ger det här felet.

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

Resultat:

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.

Problemet med den här frågan är att underfrågan använder en asterisk (* ) för att välja alla kolumner från Dogs tabell. Den tabellen har flera kolumner, så felet skapas.

Hur du åtgärdar felet

Vi kan fixa ovanstående fel på ett par sätt.

Ett sätt att fixa det är att ersätta asterisken (* ) med ett enda kolumnnamn i underfrågan:

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

Det betyder att underfrågan nu bara returnerar en kolumn istället för alla kolumner i tabellen.

Ett annat sätt att fixa det är att göra vad felmeddelandet föreslår och använda EXISTS operator istället för IN .

Att göra detta kräver en liten variation i konstruktionen av frågan:

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

Som du kan förvänta dig, EXISTS operatorn kommer också att fungera även om du bara uttryckligen anger en kolumn:

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

Men i motsats till IN operator, EXISTS fungerar också om du uttryckligen väljer flera kolumnnamn i underfrågan:

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


  1. Vad är det bästa sättet att visa en bild från en sql-serverdatabas i asp.net?

  2. Hur man använder FILEGROUPPROPERTY() i SQL Server

  3. Kan inte hitta PostgreSQL-klientbiblioteket (libpq)

  4. En guide till MySQL Galera Cluster Streaming Replication:Del ett