2023年8月3日发(作者:)

mysql修改语句⼦查询语句,MySQL的SQL语句-数据操作语句(13)-⼦查询(11)⼦查询错误有些错误只适⽤于⼦查询。本节将介绍它们。● 不⽀持的⼦查询语法:ERROR 1235 (ER_NOT_SUPPORTED_YET)SQLSTATE = 42000Message = "This version of MySQL doesn't yet support'LIMIT & IN/A这意味着 MySQL 不⽀持如下语句:SELECT * FROM t1 WHERE s1 IN (SELECT s2 FROM t2 ORDER BY s1 LIMIT 1)● ⼦查询中的列数不正确:ERROR 1241 (ER_OPERAND_COL)SQLSTATE = 21000Message = "Operand should contain 1 column(s)"在以下情况下会发⽣此错误:SELECT (SELECT column1, column2 FROM t2) FROM t1;如果⽬的是⾏⽐较,则可以使⽤返回多个列的⼦查询。在其他上下⽂中,⼦查询必须是标量操作数。● ⼦查询的⾏数不正确:ERROR 1242 (ER_SUBSELECT_NO_1_ROW)SQLSTATE = 21000Message = "Subquery returns more than 1 row"对于⼦查询最多只能返回⼀⾏但返回多⾏的语句,会出现此错误。考虑以下⽰例:SELECT * FROM t1 WHERE column1 = (SELECT column1 FROM t2);如果 SELECT column1 FROM t2 只返回⼀⾏,则上⼀个查询可以⼯作。如果⼦查询返回多⾏,则会出现错误 1242。在这种情况下,查询应重写为:SELECT * FROM t1 WHERE column1 = ANY (SELECT column1 FROM t2);● ⼦查询中的表使⽤错误:Error 1093 (ER_UPDATE_TABLE_USED)SQLSTATE = HY000Message = "You can't specify target table 'x'for update in FROM claus在以下情况下会发⽣此错误,即试图修改表并从⼦查询中对同⼀表中进⾏查询:UPDATE t1 SET column2 = (SELECT MAX(column1) FROM t1);可以使⽤公共表表达式或派⽣表来解决此问题。在 MySQL 8.0.19 及更⾼版本中,当在⼦查询中使⽤ TABLE时,本节中描述的所有错误也适⽤。对于事务性存储引擎,⼦查询的失败会导致整个语句失败。对于⾮事务存储引擎,将保留在遇到错误之前所做的数据修改。

2023年8月3日发(作者:)

mysql修改语句⼦查询语句,MySQL的SQL语句-数据操作语句(13)-⼦查询(11)⼦查询错误有些错误只适⽤于⼦查询。本节将介绍它们。● 不⽀持的⼦查询语法:ERROR 1235 (ER_NOT_SUPPORTED_YET)SQLSTATE = 42000Message = "This version of MySQL doesn't yet support'LIMIT & IN/A这意味着 MySQL 不⽀持如下语句:SELECT * FROM t1 WHERE s1 IN (SELECT s2 FROM t2 ORDER BY s1 LIMIT 1)● ⼦查询中的列数不正确:ERROR 1241 (ER_OPERAND_COL)SQLSTATE = 21000Message = "Operand should contain 1 column(s)"在以下情况下会发⽣此错误:SELECT (SELECT column1, column2 FROM t2) FROM t1;如果⽬的是⾏⽐较,则可以使⽤返回多个列的⼦查询。在其他上下⽂中,⼦查询必须是标量操作数。● ⼦查询的⾏数不正确:ERROR 1242 (ER_SUBSELECT_NO_1_ROW)SQLSTATE = 21000Message = "Subquery returns more than 1 row"对于⼦查询最多只能返回⼀⾏但返回多⾏的语句,会出现此错误。考虑以下⽰例:SELECT * FROM t1 WHERE column1 = (SELECT column1 FROM t2);如果 SELECT column1 FROM t2 只返回⼀⾏,则上⼀个查询可以⼯作。如果⼦查询返回多⾏,则会出现错误 1242。在这种情况下,查询应重写为:SELECT * FROM t1 WHERE column1 = ANY (SELECT column1 FROM t2);● ⼦查询中的表使⽤错误:Error 1093 (ER_UPDATE_TABLE_USED)SQLSTATE = HY000Message = "You can't specify target table 'x'for update in FROM claus在以下情况下会发⽣此错误,即试图修改表并从⼦查询中对同⼀表中进⾏查询:UPDATE t1 SET column2 = (SELECT MAX(column1) FROM t1);可以使⽤公共表表达式或派⽣表来解决此问题。在 MySQL 8.0.19 及更⾼版本中,当在⼦查询中使⽤ TABLE时,本节中描述的所有错误也适⽤。对于事务性存储引擎,⼦查询的失败会导致整个语句失败。对于⾮事务存储引擎,将保留在遇到错误之前所做的数据修改。