web-dev-qa-db-fra.com

Erreur MySQL 1241: L'opérande doit contenir 1 colonne (s)

J'essaie d'insérer des données d'une table1 dans une table2

insert into table2(Name,Subject,student_id,result)
select (Name,Subject,student_id,result)
from table1;

La clé pour la table2 est student_id.

Supposons qu'il n'y ait pas de doublons.

J'ai l'erreur: MySQL error 1241: Operand should contain 1 column(s)

Il n'y a que quatre colonnes dans la table2.

47

Erreur de syntaxe, supprimez le ( ) de select.

insert into table2 (name, subject, student_id, result)
select name, subject, student_id, result
from table1;
112
David

Retirez simplement le ( et le ) sur votre instruction SELECT:

insert into table2 (Name, Subject, student_id, result)
select Name, Subject, student_id, result
from table1;
18
fthiella

Une autre façon de faire en sorte que l'analyseur soulève la même exception est la clause incorrecte suivante.

SELECT r.name
FROM roles r
WHERE id IN ( SELECT role_id ,
                     system_user_id
                 FROM role_members m
                 WHERE r.id = m.role_id
                 AND m.system_user_id = intIdSystemUser
             )

L'instruction imbriquée SELECT dans la clause IN renvoie deux colonnes, que l'analyseur considère comme des opérandes, ce qui est techniquement correct, car la colonne id correspond aux valeurs d'une seule colonne (role_id) dans le résultat. retourné par l'instruction select imbriquée, qui devrait renvoyer une liste.

Par souci d’exhaustivité, la syntaxe correcte est la suivante.

SELECT r.name
FROM roles r
WHERE id IN ( SELECT role_id
                 FROM role_members m
                 WHERE r.id = m.role_id
                 AND m.system_user_id = intIdSystemUser
             )

La procédure stockée dont cette requête est une partie non seulement analysée, mais a renvoyé le résultat attendu.

3
David A. Gray