Heim >Datenbank >MySQL-Tutorial >Warum gibt meine MySQL-Abfrage den Fehler „Operand sollte 1 Spalte(n) enthalten' zurück?

Warum gibt meine MySQL-Abfrage den Fehler „Operand sollte 1 Spalte(n) enthalten' zurück?

Susan Sarandon
Susan SarandonOriginal
2025-01-12 15:26:43499Durchsuche

Why Does My MySQL Query Return an

MySQL-Fehler: Problem „Operand sollte 1 Spalte enthalten“ behoben

In Ihrer MySQL-Abfrage ist der Fehler „Operand sollte 1 Spalte enthalten“ aufgetreten. Dieser Fehler tritt normalerweise auf, wenn eine Unterabfrage mehrere Spalten zurückgibt, die äußere Abfrage jedoch nur eine einzige Spalte an dieser Position erwartet.

Verständnisfehler:

Die fehlerhafte Abfrage enthält eine Unterabfrage:

<code class="language-sql">(SELECT users.username AS posted_by,
    users.id AS posted_by_id
    FROM users
    WHERE users.id = posts.posted_by)</code>

Diese Unterabfrage ruft zwei Spalten ab: „posted_by“ und „posted_by_id“. Sie verwenden diese Unterabfrage jedoch als einzelne Spalte in der äußeren Abfrage:

<code class="language-sql">COUNT( posts.solved_post ) AS solved_post,
(SUBQUERY)</code>

Diese Inkonsistenz führt zum Fehler „Operand sollte 1 Spalte enthalten“, da die äußere Abfrage an dieser Stelle eine einzelne Spalte erwartet.

Lösung:

Methode 1: Tischverbindung verwenden

Um dieses Problem zu lösen, sollten Sie erwägen, die Tabelle „users“ direkt zu verknüpfen, anstatt eine Unterabfrage zu verwenden. Dadurch können Sie die Spalten „posted_by“ und „posted_by_id“ explizit auswählen, ohne die Einzelspaltenbeschränkung zu verletzen.

<code class="language-sql">SELECT
topics.id,
topics.name,
topics.post_count,
topics.view_count,
COUNT( posts.solved_post ) AS solved_post,
users.username AS posted_by,
users.id AS posted_by_id

FROM topics

LEFT OUTER JOIN posts ON posts.topic_id = topics.id
LEFT OUTER JOIN users ON users.id = posts.posted_by

WHERE topics.cat_id = :cat
GROUP BY topics.id</code>

Methode 2: Wählen Sie eine einzelne Spalte aus einer Unterabfrage aus

Alternativ können Sie, wenn Sie darauf bestehen, eine Unterabfrage zu verwenden, diese so ändern, dass nur die erforderlichen Spalten zurückgegeben werden. Beispielsweise können Sie nur die Spalte „posted_by“ abrufen:

<code class="language-sql">(SELECT users.username AS posted_by
    FROM users
    WHERE users.id = posts.posted_by)</code>

Durch die Auswahl einer einzelnen Spalte in einer Unterabfrage stellen Sie sicher, dass diese die Einzelspaltenanforderungen der äußeren Abfrage erfüllt.

Das obige ist der detaillierte Inhalt vonWarum gibt meine MySQL-Abfrage den Fehler „Operand sollte 1 Spalte(n) enthalten' 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