Maison >base de données >tutoriel mysql >Pourquoi ma requête MySQL renvoie-t-elle « L'opérande doit contenir 1 colonne(s) » et comment puis-je y remédier ?

Pourquoi ma requête MySQL renvoie-t-elle « L'opérande doit contenir 1 colonne(s) » et comment puis-je y remédier ?

Susan Sarandon
Susan Sarandonoriginal
2025-01-12 15:06:471069parcourir

Why Does My MySQL Query Return

Erreur de requête MySQL : "L'opérande doit contenir 1 colonne"

Description du problème :

Lors de l'exécution d'une requête MySQL qui joint plusieurs tables et contient une sous-requête (sélection de colonnes d'une autre table), une erreur s'est produite : "#1241 - L'opérande doit contenir 1 colonne(s)".

Requête :

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

Raison de l'erreur :

L'erreur

se produit car la sous-requête sélectionne deux colonnes (users et username) dans la table id et la requête externe s'attend à ce que la sous-requête ne renvoie qu'une seule colonne.

Solution :

Il existe deux manières de résoudre cette erreur :

  1. Modifier la sous-requête :

    • Modifiez la sous-requête pour renvoyer uniquement les username colonnes ou les id colonnes.
  2. Connecter users table :

    • Au lieu d'utiliser une sous-requête, joignez la table posted_by directement à la table users à l'aide de la colonne posts. Cette approche offre plus de flexibilité lors de la sélection des colonnes requises dans le tableau users.

Requête modifiée :

Utiliser la sous-requête :

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

Utiliser la connexion :

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

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!

Déclaration:
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