SQL-Unterabfragefehler: „Nur ein Ausdruck zulässig“
Dieser Fehler „In der Auswahlliste kann nur ein Ausdruck angegeben werden, wenn die Unterabfrage nicht mit EXISTS eingeführt wird“ tritt auf, wenn eine in einer IN
-Klausel verwendete Unterabfrage mehrere Spalten zurückgibt. Der IN
-Operator erwartet zum Vergleich eine einspaltige Ergebnismenge.
Problematische Abfrage:
Die folgende Abfrage versucht, eine Unterabfrage zu verwenden, die A_ID
und eine Anzahl (ud
) innerhalb einer IN
-Klausel zurückgibt:
<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>
Grundursache:
Die innere SELECT
-Anweisung gibt zwei Spalten zurück: A_ID
und ud
. Der IN
-Operator kann damit nicht umgehen; Für den Vergleich mit der Spalte A_ID
in der äußeren Abfrage ist eine einzelne Spalte erforderlich.
Korrigierte Abfrage:
Die Lösung besteht darin, die Unterabfrage so zu ändern, dass nur die Spalte A_ID
zurückgegeben wird. Die Sortierung nach Anzahl kann innerhalb der Unterabfrage mit ORDER BY COUNT(DISTINCT dNum) DESC
:
<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 korrekt die oberen 10 % der A_ID
-Werte basierend auf der Anzahl unterschiedlicher dNum
-Werte aus und verwendet diese A_ID
-Werte dann zum Filtern der äußeren Abfrage.
Das obige ist der detaillierte Inhalt vonWarum erzeugt meine SQL-Unterabfrage den Fehler „Nur ein Ausdruck zulässig'?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!