Tout en travaillant sur un système que je crée, j'ai tenté d'utiliser la requête suivante dans mon projet:
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
": cat" est lié par mon code PHP car j'utilise PDO. 2 est une valeur valide pour ": cat".
Cette requête me donne cependant une erreur: "# 1241 - L'opérande doit contenir 1 colonne (s)"
Ce qui me dérange, c'est que je pense que cette requête ne fonctionnerait pas. Sélectionner des colonnes, puis en sélectionner deux autres dans une autre table, et continuer à partir de là. Je n'arrive tout simplement pas à comprendre quel est le problème.
Existe-t-il une solution simple à cela ou une autre façon d'écrire ma requête?
la source
COUNT()
cela gâche un peu les choses; la requête que j'ai donnée donnera probablement une erreur en raison de l'agrégation. Vous devrez peut-être déplacer cette agrégation dans une sous-requête, en fonction des objectifs de votre requête (qui ne sont pas clairs pour moi pour le moment).Cette erreur peut également se produire si vous utilisez accidentellement des virgules au lieu de
AND
dans laON
clause d'unJOIN
:la source
Cette erreur peut également se produire si vous utilisez accidentellement
=
au lieu deIN
dans laWHERE
clause:PAR EXEMPLE:
la source
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)
Eh bien, vous ne pouvez pas obtenir plusieurs colonnes à partir d'une sous-requête comme celle-ci. Heureusement, la deuxième colonne est déjà
posts.posted_by
! Donc:SELECT topics.id, topics.name, topics.post_count, topics.view_count, posts.posted_by COUNT( posts.solved_post ) AS solved_post, (SELECT users.username AS posted_by_username FROM users WHERE users.id = posts.posted_by) ...
la source
Dans mon cas, le problème était que j'ai entouré ma sélection de colonnes avec des parenthèses par erreur:
SELECT (p.column1, p.colum2, p.column3) FROM table1 p where id = 1;
Et doit être:
SELECT p.column1, p.colum2, p.column3 FROM table1 p where id = 1;
Cela semble idiot, mais cela causait cette erreur et il a fallu un certain temps pour la comprendre.
la source
Cette erreur peut également se produire dans l'attribution d'une valeur comportant une virgule en dehors d'une chaîne. Par exemple:
SET totalvalue = (IFNULL(i.subtotal,0) + IFNULL(i.tax,0),0)
la source
Cette erreur peut également se produire si vous manquez accidentellement le
if
nom de la fonction.par exemple:
set v_filter_value = 100; select f_id, f_sale_value from t_seller where f_id = 5 and (v_filter_value <> 0, f_sale_value = v_filter_value, true);
J'ai eu ce problème quand j'ai manqué de mettre si dans la
if
fonction!la source
(SELECT users.username AS posted_by, users.id AS posted_by_id FROM users WHERE users.id = posts.posted_by)
Ici, vous utilisez une sous-requête mais cette sous-requête ne doit renvoyer qu'une seule colonne. Séparez-le sinon il affichera une erreur.
la source
J'ai eu cette erreur lors de l'exécution d'un script MySQL dans une console Intellij, en raison de l'ajout de crochets au mauvais endroit:
FAUX:
SELECT user.id FROM user WHERE id IN (:ids); # Do not put brackets around list argument
DROITE:
SELECT user.id FROM user WHERE id IN :ids; # No brackets is correct
la source