Maison > base de données > tutoriel mysql > Comment corriger l'erreur « L'opérande doit contenir 1 colonne(s) » de MySQL dans les sous-requêtes ?

Comment corriger l'erreur « L'opérande doit contenir 1 colonne(s) » de MySQL dans les sous-requêtes ?

Patricia Arquette
Libérer: 2025-01-12 15:13:45
original
542 Les gens l'ont consulté

How to Fix MySQL's

Dépannage de l'erreur "L'opérande doit contenir 1 colonne(s)" de MySQL

Lors du développement d'une base de données, il est courant de rencontrer des erreurs MySQL. Une de ces erreurs, "'#1241 - L'opérande doit contenir 1 colonne(s)'", survient fréquemment lors de l'utilisation de sous-requêtes qui renvoient plusieurs colonnes. Cela se produit généralement lorsqu'une sous-requête fournit plus d'une colonne à une requête externe attendant un résultat d'une seule colonne.

Répartition du problème

Le message d'erreur indique une incompatibilité entre le nombre de colonnes renvoyé par une sous-requête et l'attente de la requête principale. L'instruction SELECT externe tente d'utiliser le résultat de la sous-requête multicolonne comme s'il s'agissait d'une valeur unique.

Solutions

Cette erreur peut être résolue en ajustant la structure de votre requête. Voici deux approches efficaces :

  1. Jointure directe de table : Au lieu d'imbriquer une sous-requête, joignez directement les tables concernées. Cela offre plus de contrôle et de flexibilité lors de la sélection de colonnes spécifiques.
<code class="language-sql">SELECT
    t.id,
    t.name,
    t.post_count,
    t.view_count,
    COUNT(p.solved_post) AS solved_post,
    u.username AS posted_by,
    u.id AS posted_by_id
FROM
    topics t
LEFT OUTER JOIN
    posts p ON p.topic_id = t.id
LEFT OUTER JOIN
    users u ON u.id = p.posted_by
WHERE
    t.cat_id = :cat
GROUP BY
    t.id;</code>
Copier après la connexion
  1. Sous-requête à colonne unique : Si vous préférez conserver la sous-requête, modifiez-la pour renvoyer une seule colonne. Cela peut impliquer l'utilisation de fonctions d'agrégation (comme MAX(), MIN(), AVG()) ou la sélection d'une colonne spécifique dans la table users.
<code class="language-sql">SELECT
    t.id,
    t.name,
    t.post_count,
    t.view_count,
    COUNT(p.solved_post) AS solved_post,
    (SELECT u.username FROM users u WHERE u.id = p.posted_by) AS posted_by_username
FROM
    topics t
LEFT OUTER JOIN
    posts p ON p.topic_id = t.id
GROUP BY
    t.id;</code>
Copier après la connexion

En implémentant l'une ou l'autre de ces solutions, vous corrigerez l'erreur d'opérande et récupérerez avec précision les données requises de votre base de données MySQL. Le choix de la meilleure solution dépend de vos besoins spécifiques en matière de données et de la conception de vos requêtes.

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