web-dev-qa-db-ja.com

MySQLエラー1241:オペランドには1列が含まれている必要があります

Table1からtable2にデータを挿入しようとしています

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

Table2のキーはstudent_idです。

重複がないと仮定します。

エラーが表示されます:MySQL error 1241: Operand should contain 1 column(s)

Table2には4列しかありません。

47

構文エラー。selectから( )を削除してください。

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

SELECTステートメントの()を削除するだけです:

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

パーサーに同じ例外を発生させる別の方法は、次の誤った句です。

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
             )

SELECT句のネストされたINステートメントは2つの列を返します。パーサーはオペランドとして認識しますが、技術的には正しいです。id列が返す結果の1つの列(role_id)リストを返すことが期待されるネストされた選択ステートメント。

完全を期すために、正しい構文は次のとおりです。

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
             )

このクエリが解析されるだけでなく、期待される結果を返す部分であるストアドプロシージャ。

3
David A. Gray