Heim >Datenbank >MySQL-Tutorial >Warum gibt meine SQL-Unterabfrage „In der Auswahlliste kann nur ein Ausdruck angegeben werden, wenn die Unterabfrage nicht mit EXISTS eingeleitet wird' zurück?
SQL-Unterabfragefehler: Einzelner Ausdruck in der SELECT-Liste
Diese SQL-Abfrage erzeugt einen Fehler:
<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 Fehlermeldung „In der Auswahlliste kann nur ein Ausdruck angegeben werden, wenn die Unterabfrage nicht mit EXISTS eingeleitet wird“ weist auf ein Problem mit der SELECT
-Klausel der Unterabfrage hin. Die Unterabfrage versucht, zwei Spalten zurückzugeben: A_ID
und COUNT(DISTINCT dNum)
. Bei Verwendung von IN
(oder anderen Vergleichsoperatoren wie =
, !=
usw.) darf die SELECT
-Liste der Unterabfrage nur eine einzige Spalte enthalten.
Lösung:
Die korrigierte Abfrage sollte nur A_ID
aus der Unterabfrage zurückgeben:
<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>
Beachten Sie die Änderungen:
SELECT
-Klausel der Unterabfrage enthält jetzt nur noch A_ID
.ORDER BY
-Klausel, die zuvor in der Unterabfrage enthalten war, wurde in die äußere Abfrage verschoben. Dies liegt daran, dass das ursprüngliche ORDER BY
versuchte, die Unterabfrageergebnisse zu sortieren, bevor sie in der IN
-Klausel verwendet wurden; Die Sortierung sollte für die endgültige Ergebnismenge gelten.Diese überarbeitete Abfrage wählt korrekt die Anzahl der unterschiedlichen dNum
-Werte aus, bei denen A_ID
in den Ergebnissen der Unterabfrage gefunden wird. Die Unterabfrage identifiziert effizient die oberen 10 % der A_ID
-Werte basierend auf der Anzahl der eindeutigen dNum
, und die äußere Abfrage zählt dann die eindeutigen dNum
-Werte, die diesen ausgewählten A_ID
s zugeordnet sind. Die letzte ORDER BY
-Klausel sortiert die Ergebnisse basierend auf der Anzahl der unterschiedlichen dNum
-Werte.
Das obige ist der detaillierte Inhalt vonWarum gibt meine SQL-Unterabfrage „In der Auswahlliste kann nur ein Ausdruck angegeben werden, wenn die Unterabfrage nicht mit EXISTS eingeleitet wird' zurück?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!