Maison > base de données > tutoriel mysql > Pourquoi ma requête MySQL renvoie-t-elle une erreur « L'opérande doit contenir 1 colonne(s) » ?

Pourquoi ma requête MySQL renvoie-t-elle une erreur « L'opérande doit contenir 1 colonne(s) » ?

Susan Sarandon
Libérer: 2025-01-12 15:26:43
original
498 Les gens l'ont consulté

Why Does My MySQL Query Return an

Erreur MySQL : correction du problème "l'opérande doit contenir 1 colonne"

Dans votre requête MySQL, vous avez rencontré l'erreur « L'opérande doit contenir 1 colonne ». Cette erreur se produit généralement lorsqu'une sous-requête renvoie plusieurs colonnes, mais que la requête externe n'attend qu'une seule colonne à cet emplacement.

Erreur de compréhension :

La requête erronée contient une sous-requête :

<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>
Copier après la connexion

Cette sous-requête récupère deux colonnes, "posted_by" et "posted_by_id". Cependant, vous utilisez cette sous-requête comme une seule colonne dans la requête externe :

<code class="language-sql">COUNT( posts.solved_post ) AS solved_post,
(SUBQUERY)</code>
Copier après la connexion

Cette incohérence entraîne l'erreur « l'opérande doit contenir 1 colonne » car la requête externe attend une seule colonne à cet emplacement.

Solution :

Méthode 1 : Utiliser la connexion par table

Pour résoudre ce problème, pensez à rejoindre directement la table "users" au lieu d'utiliser une sous-requête. Cela vous permettra de sélectionner explicitement les colonnes "posted_by" et "posted_by_id" sans violer la contrainte de colonne unique.

<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>
Copier après la connexion

Méthode 2 : Sélectionner une seule colonne dans une sous-requête

Alternativement, si vous insistez pour utiliser une sous-requête, vous pouvez la modifier pour renvoyer uniquement les colonnes requises. Par exemple, vous pouvez récupérer uniquement la colonne "posted_by" :

<code class="language-sql">(SELECT users.username AS posted_by
    FROM users
    WHERE users.id = posts.posted_by)</code>
Copier après la connexion

En sélectionnant une seule colonne dans une sous-requête, vous vous assurez qu'elle répond aux exigences de colonne unique de la requête externe.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal