Heim >Datenbank >MySQL-Tutorial >Warum gibt meine MySQL-Abfrage „Operand sollte 1 Spalte(n) enthalten' zurück und wie kann ich das beheben?

Warum gibt meine MySQL-Abfrage „Operand sollte 1 Spalte(n) enthalten' zurück und wie kann ich das beheben?

Susan Sarandon
Susan SarandonOriginal
2025-01-12 15:06:471003Durchsuche

Why Does My MySQL Query Return

MySQL-Abfragefehler: „Operand sollte 1 Spalte enthalten“

Problembeschreibung:

Beim Ausführen einer MySQL-Abfrage, die mehrere Tabellen verknüpft und eine Unterabfrage enthält (die Spalten aus einer anderen Tabelle auswählt), ist ein Fehler aufgetreten: „#1241 – Operand sollte 1 Spalte(n) enthalten“.

Abfrage:

<code class="language-sql">SELECT
topics.id,
topics.name,
topics.post_count,
topics.view_count,
COUNT( posts.solved_post ) AS solved_post,
(SELECT users.username AS posted_by,
    users.id AS posted_by_id
    FROM users
    WHERE users.id = posts.posted_by)
FROM topics
LEFT OUTER JOIN posts ON posts.topic_id = topics.id
WHERE topics.cat_id = :cat
GROUP BY topics.id</code>

Fehlergrund:

Der Fehler

tritt auf, weil die Unterabfrage zwei Spalten (users und username) aus der Tabelle id auswählt und die äußere Abfrage erwartet, dass die Unterabfrage nur eine einzige Spalte zurückgibt.

Lösung:

Es gibt zwei Möglichkeiten, diesen Fehler zu beheben:

  1. Unterabfrage ändern:

    • Ändern Sie die Unterabfrage so, dass nur username-Spalten oder id-Spalten zurückgegeben werden.
  2. Tabelle users verbinden:

    • Anstatt eine Unterabfrage zu verwenden, verknüpfen Sie die Tabelle posted_by mithilfe der Spalte users direkt mit der Tabelle posts. Dieser Ansatz bietet mehr Flexibilität bei der Auswahl der erforderlichen Spalten aus der Tabelle users.

Geänderte Abfrage:

Unterabfrage verwenden:

<code class="language-sql">SELECT
topics.id,
topics.name,
topics.post_count,
topics.view_count,
COUNT( posts.solved_post ) AS solved_post,
(SELECT users.username AS posted_by
    FROM users
    WHERE users.id = posts.posted_by)
FROM topics
LEFT OUTER JOIN posts ON posts.topic_id = topics.id
WHERE topics.cat_id = :cat
GROUP BY topics.id</code>

Verbindung verwenden:

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

Das obige ist der detaillierte Inhalt vonWarum gibt meine MySQL-Abfrage „Operand sollte 1 Spalte(n) enthalten' zurück und wie kann ich das beheben?. 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