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 :
Modifier la sous-requête :
username
colonnes ou les id
colonnes. Connecter users
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!