Bug #83286 Invalid error for Subquery returns more than 1 row
| Submitted: | 6 Oct 2016 12:54 | Modified: | 2 Jan 2020 22:57 |
|---|---|---|---|
| Reporter: | Ryan Brothers | Email Updates: | |
| Status: | Closed | Impact on me: | |
| Category: | MySQL Server: DML | Severity: | S3 (Non-critical) |
| Version: | 5.7 | OS: | Any |
| Assigned to: | CPU Architecture: | Any |
[6 Oct 2016 18:52]
MySQL Verification Team
Thank you for the bug report.
mysql 5.7 > INSERT INTO table1 (table2_id) VALUES
-> ((SELECT table2_id FROM table3 JOIN table2 USING (table3_id) WHERE table2_name = 'Test3')),
-> ((SELECT table2_id FROM table3 JOIN table2 USING (table3_id) WHERE table2_name = 'Test3'));
ERROR 1242 (21000): Subquery returns more than 1 row
mysql 5.7 > SHOW VARIABLES LIKE "%VERSION%";
+-------------------------+---------------------------------------+
| Variable_name | Value |
+-------------------------+---------------------------------------+
| innodb_version | 5.7.17 |
| protocol_version | 10 |
| slave_type_conversions | |
| tls_version | TLSv1,TLSv1.1 |
| version | 5.7.17 |
| version_comment | Source distribution PULL: 2016-OCT-03 |
| version_compile_machine | x86_64 |
| version_compile_os | Win64 |
+-------------------------+---------------------------------------+
8 rows in set (0.02 sec)
mysql 5.6 > INSERT INTO table1 (table2_id) VALUES
-> ((SELECT table2_id FROM table3 JOIN table2 USING (table3_id) WHERE table2_name = 'Test3')),
-> ((SELECT table2_id FROM table3 JOIN table2 USING (table3_id) WHERE table2_name = 'Test3'));
Query OK, 2 rows affected (0.03 sec)
Records: 2 Duplicates: 0 Warnings: 0
mysql 5.6 > SHOW VARIABLES LIKE "%VERSION%";
+-------------------------+---------------------------------------+
| Variable_name | Value |
+-------------------------+---------------------------------------+
| innodb_version | 5.6.35 |
| protocol_version | 10 |
| slave_type_conversions | |
| version | 5.6.35 |
| version_comment | Source distribution PULL: 2016-OCT-03 |
| version_compile_machine | x86_64 |
| version_compile_os | Win64 |
+-------------------------+---------------------------------------+
7 rows in set (0.05 sec)
mysql 5.5 > INSERT INTO table1 (table2_id) VALUES
-> ((SELECT table2_id FROM table3 JOIN table2 USING (table3_id) WHERE table2_name = 'Test3')),
-> ((SELECT table2_id FROM table3 JOIN table2 USING (table3_id) WHERE table2_name = 'Test3'));
Query OK, 2 rows affected (0.14 sec)
Records: 2 Duplicates: 0 Warnings: 0
mysql 5.5 > SHOW VARIABLES LIKE "%VERSION%";
+-------------------------+---------------------------------------+
| Variable_name | Value |
+-------------------------+---------------------------------------+
| innodb_version | 5.5.54 |
| protocol_version | 10 |
| slave_type_conversions | |
| version | 5.5.54 |
| version_comment | Source distribution PULL: 2016-OCT-03 |
| version_compile_machine | AMD64 |
| version_compile_os | Win64 |
+-------------------------+---------------------------------------+
7 rows in set (0.00 sec)
[7 Oct 2016 9:53]
Knut Anders Hatlen
Posted by developer: The statements don't fail on trunk (8.0.1) after WL#5094 - Create SQL command classes for DML statements. The regression was introduced in 5.7 by WL#5275 - Process subqueries in FROM clause in the same way as view.
[2 Jan 2020 22:57]
Roy Lyseng
Posted by developer: Fixed in 5.7.29
Portions of this website are copyright © 2001, 2002 The PHP Group
Page generated in 0.040 sec. using MySQL 8.4.7-u6-cloud
Timestamp references displayed by the system are UTC.
Content reproduced on this site is the property of the
respective copyright holders.
It is not reviewed in advance
by Oracle and does not necessarily represent the opinion of
Oracle or any other party.
Description: I am receiving an error when running the below SQL in MySQL 5.7. It runs cleanly in MySQL 5.6 with no errors. The error is: ERROR 1242 (21000) at line 27: Subquery returns more than 1 row If I split the last insert into 2 separate inserts, then it runs cleanly in MySQL 5.7. How to repeat: DROP TABLE IF EXISTS table1; DROP TABLE IF EXISTS table2; DROP TABLE IF EXISTS table3; CREATE TABLE table3 ( table3_id int NOT NULL AUTO_INCREMENT, table3_name varchar(16) NOT NULL, PRIMARY KEY (table3_id) ) ENGINE=InnoDB; CREATE TABLE table2 ( table2_id int NOT NULL AUTO_INCREMENT, table3_id int NOT NULL, table2_name varchar(16) NOT NULL, PRIMARY KEY (table2_id) ) ENGINE=InnoDB; CREATE TABLE table1 ( table1_id int NOT NULL AUTO_INCREMENT, table2_id int NOT NULL, PRIMARY KEY (table1_id) ) ENGINE=InnoDB; INSERT INTO table3 (table3_name) VALUES ('Test1'),('Test2'); INSERT INTO table2 (table3_id, table2_name) VALUES (1, 'Test3'); INSERT INTO table1 (table2_id) VALUES ((SELECT table2_id FROM table3 JOIN table2 USING (table3_id) WHERE table2_name = 'Test3')), ((SELECT table2_id FROM table3 JOIN table2 USING (table3_id) WHERE table2_name = 'Test3'));