sql >> Database >  >> RDS >> Sqlserver

Hoe te repareren "Er kan slechts één uitdrukking worden opgegeven in de selectielijst ..." in SQL Server

In SQL Server treedt foutbericht 116 op wanneer u probeert meerdere kolommen in een subquery te selecteren zonder deze te introduceren met de EXISTS telefoniste.

De volledige fout ziet er als volgt uit:

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.

Voorbeeld

Hier is een voorbeeld van een zoekopdracht die deze fout veroorzaakt.

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

Resultaat:

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.

Het probleem met deze query is dat de subquery een asterisk gebruikt (* ) om alle kolommen uit de Dogs . te selecteren tafel. Die tabel heeft meerdere kolommen, en dus wordt de fout geproduceerd.

Hoe de fout op te lossen

We kunnen de bovenstaande fout op een aantal manieren oplossen.

Een manier om dit op te lossen is door het sterretje (* ) met een enkele kolomnaam in de subquery:

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

Dit betekent dat de subquery nu slechts één kolom retourneert in plaats van alle kolommen in de tabel.

Een andere manier om het op te lossen, is door te doen wat de foutmelding suggereert en de EXISTS . te gebruiken operator in plaats van IN .

Hiervoor is een kleine variatie in de constructie van de zoekopdracht vereist:

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

Zoals je mag verwachten, bestaat de EXISTS operator werkt ook, zelfs als u slechts één kolom expliciet vermeldt:

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

Maar in tegenstelling tot de IN operator, EXISTS werkt ook als u expliciet meerdere kolomnamen selecteert in de subquery:

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


  1. Hoe kan ik mogelijke waarden opsommen in een MySQL-database?

  2. Hoe u PII classificeert, zoekt en maskeert in databases...

  3. Nieuwe stuurprogramma's voor SQL Server... Wat u moet weten

  4. utl_file.fopen Parameters in Oracle