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:
Unterabfrage ändern:
username
-Spalten oder id
-Spalten zurückgegeben werden. Tabelle users
verbinden:
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!