Fehlerbehebung bei SQL-Unterabfragefehlern: „Nur ein Ausdruck kann angegeben werden …“
Dieser Fehler „In der Auswahlliste kann nur ein Ausdruck angegeben werden, wenn die Unterabfrage nicht mit EXISTS eingeführt wird“ tritt auf, wenn Ihre SQL-Abfrage eine Unterabfrage innerhalb einer IN
-Klausel verwendet und die Unterabfrage versucht, mehrere Spalten zurückzugeben . Der IN
-Operator akzeptiert nur eine einzelne Spalte zum Vergleich.
Lassen Sie uns die problematische Abfrage untersuchen:
<code class="language-sql">select count(distinct dNum) from myDB.dbo.AQ where A_ID in (SELECT DISTINCT TOP (0.1) PERCENT A_ID, COUNT(DISTINCT dNum) AS ud FROM myDB.dbo.AQ WHERE M > 1 and B = 0 GROUP BY A_ID ORDER BY ud DESC)</code>
Die innere SELECT
-Anweisung gibt fälschlicherweise sowohl A_ID
als auch COUNT(DISTINCT dNum) AS ud
zurück. Dies verstößt gegen die Regel für Unterabfragen, die mit IN
.
Die korrigierte Abfrage:
Die Lösung besteht darin, die Unterabfrage so umzustrukturieren, dass nur die Spalte A_ID
zurückgegeben wird:
<code class="language-sql">select count(distinct dNum) from myDB.dbo.AQ where A_ID in (SELECT DISTINCT TOP (0.1) PERCENT A_ID FROM myDB.dbo.AQ WHERE M > 1 and B = 0 GROUP BY A_ID ORDER BY COUNT(DISTINCT dNum) DESC)</code>
Diese überarbeitete Abfrage wählt jetzt korrekt nur A_ID
in der Unterabfrage aus, wodurch der Fehler behoben wird. Die Sortierung nach COUNT(DISTINCT dNum)
erfolgt innerhalb der Unterabfrage selbst, wodurch sichergestellt wird, dass die obersten 10 % der A_ID
-Werte (basierend auf COUNT(DISTINCT dNum)
) ausgewählt werden.
Das obige ist der detaillierte Inhalt vonWarum erzeugt meine SQL-Unterabfrage den Fehler „In der Auswahlliste kann nur ein Ausdruck angegeben werden'?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!