MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

UPDATEステートメントのSET句で新しい値を割り当てるために使用されるサブクエリが複数の行を返す場合、MySQLは何を返しますか?


この場合、MySQLはエラーメッセージを返します。これは、サブクエリを使用してUPDATEステートメントのSET句に新しい値を割り当てる場合、WHERE句に一致する更新テーブルの各行に対して正確に1つの行を返す必要があることがわかっているためです。 。

mysql> insert into info(id, remarks) values(5,'average');
Query OK, 1 row affected (0.06 sec)

mysql> select * from info;
+------+-----------+
| id   | remarks   |
+------+-----------+
| 1    | Good      |
| 2    | Good      |
| 3    | Excellent |
| 4    | Average   |
| 5    | Best      |
| 5    | average   |
+------+-----------+
6 rows in set (0.00 sec)

上記のように、「info」テーブルにはid =5の2つの行があるため、サブクエリで使用すると複数の行が返され、このためMySQLは次のようなエラーメッセージを返します-

mysql> UPDATE STUDENT SET grade = (SELECT remarks from info WHERE info.id = student.id) WHERE id = 5;
ERROR 1242 (21000): Subquery returns more than 1 row

  1. MySQLで単一のWHERE句を使用して複数の行を更新するにはどうすればよいですか?

    このために、MySQL IN()を使用できます。まず、-を作成しましょう mysql> create table DemoTable1420    -> (    -> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,    -> FirstName varchar(20),    -> LastName varchar(20),    -> Age int    -> ); Query OK,

  2. MySQLWHERE句の複数の値で更新

    最初にテーブルを作成しましょう- mysql> create table DemoTable    -> (    -> Id int,    -> Name varchar(20),    -> Age int,    -> CountryName varchar(10)    -> ); Query OK, 0 rows affected (0.81 sec) 挿入コマンド-を使用して、テーブルにいくつかのレコードを挿入します