Heim >Datenbank >MySQL-Tutorial >Wie behebe ich den MySQL-Fehler „Operand sollte 1 Spalte(n) enthalten'?

Wie behebe ich den MySQL-Fehler „Operand sollte 1 Spalte(n) enthalten'?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2025-01-12 15:27:43843Durchsuche

How to Fix the

MySQL-Fehler „Operand sollte 1 Spalte enthalten“ Lösung

In diesem Artikel wird der Fehler „Operand sollte 1 Spalte(n) enthalten“ behoben, der bei MySQL-Abfragen auftritt. Dieser Fehler tritt normalerweise auf, wenn eine Unterabfrage mehrere Spalten zurückgibt, die äußere Abfrage jedoch nur eine einzige Spalte erwartet.

Missverständnis:

Der Fehler „Operand sollte 1 Spalte(n) enthalten“ weist darauf hin, dass der Operand (hier eine Unterabfrage) erwartete, eine einzelne Spalte zurückzugeben, tatsächlich aber mehrere Spalten zurückgab, was zu einer Nichtübereinstimmung der Spaltennummern führte.

Problem gelöst:

Dieses Problem kann durch Ändern der Abfrage gelöst werden, um sicherzustellen, dass die Unterabfrage nur eine einzige Spalte zurückgibt. Es gibt zwei Hauptmethoden:

1. Verwenden Sie JOIN:

Vermeiden Sie die Verwendung von Unterabfragen und verwenden Sie JOIN direkt, um die Tabelle users mit der Tabelle posts in der Spalte posted_by zu verbinden. Diese Methode ist flexibler, wenn bestimmte Spalten in der Tabelle users ausgewählt werden.

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

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

Alternativ können Sie die Unterabfrage mithilfe der GROUP BY-Klausel so ändern, dass nur eine einzelne Spalte zurückgegeben wird. Dieser Ansatz kann jedoch zu Datenverlust führen, wenn mehrere Benutzer dieselbe ID haben.

<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 FROM users WHERE users.id = posts.posted_by GROUP BY users.id) AS posted_by
FROM topics
LEFT OUTER JOIN posts ON posts.topic_id = topics.id
WHERE topics.cat_id = :cat
GROUP BY topics.id</code>

Welche Methode Sie wählen, hängt von Ihren spezifischen Anforderungen und der Datenstruktur ab. Der erste Ansatz (mit JOIN) ist in der Regel die effizientere und übersichtlichere Lösung.

Das obige ist der detaillierte Inhalt vonWie behebe ich den MySQL-Fehler „Operand sollte 1 Spalte(n) enthalten'?. 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