Heim >Datenbank >MySQL-Tutorial >Warum erzeugt meine SQL-Unterabfrage den Fehler „Nur ein Ausdruck zulässig'?

Warum erzeugt meine SQL-Unterabfrage den Fehler „Nur ein Ausdruck zulässig'?

Patricia Arquette
Patricia ArquetteOriginal
2025-01-11 13:17:42590Durchsuche

Why Does My SQL Subquery Produce an

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:

erfolgen
<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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn