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?

Warum gibt meine SQL-Unterabfrage „In der Auswahlliste kann nur ein Ausdruck angegeben werden, wenn die Unterabfrage nicht mit EXISTS eingeleitet wird' zurück?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2025-01-11 13:32:44553Durchsuche

Why Does My SQL Subquery Return

Einschränkungen der SQL-Unterabfrage-Auswahlliste

Wenn Sie auf die Fehlermeldung „Wenn die Unterabfrage nicht mit EXISTS beginnt, kann nur ein Ausdruck in der Auswahlliste angegeben werden“ stoßen, bedeutet dies, dass ein Problem mit dem Rückgabewert der Unterabfrage vorliegt. Stellen Sie in einer Unterabfrage, die in einer WHERE IN-Klausel verschachtelt ist, immer sicher, dass nur eine Spalte zum Vergleich mit der anderen Seite der IN-Klausel zurückgegeben wird.

Die bereitgestellte Abfrage enthält zunächst eine Unterabfrage, die A_ID und COUNT(DISTINCT dNum) als ud zurückgibt. Allerdings kann die Unterabfrage in der WHERE IN-Klausel nur eine einzelne Spalte zurückgeben, die mit der A_ID in der Hauptabfrage verglichen wird. Der Grund für diese Einschränkung besteht darin, dass die Funktion der Unterabfrage darin besteht, eine Liste von Werten zurückzugeben, um zu überprüfen, ob die A_ID in der Hauptabfrage mit einem Wert im Ergebnis der Unterabfrage übereinstimmt.

Um dieses Problem zu lösen, ändern Sie die Unterabfrage so, dass nur die Spalte A_ID zurückgegeben wird, die mit der A_ID in der WHERE IN-Klausel der Hauptabfrage verglichen wird. Darüber hinaus kann die Sortierung in der ORDER-Klausel verwendet werden, um Zeilen aus einer Unterabfrage auszuwählen, ohne COUNT als Spalte zurückzugeben.

Korrigiertes Abfragebeispiel:

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

Durch die Implementierung dieser Änderungen können Abfragen die gewünschten Ergebnisse korrekt zurückgeben und gleichzeitig die Regel einhalten, eine einzelne Spalte für WHERE IN-Vergleiche zurückzugeben.

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!

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