MySQL 9.0 發行說明
有些錯誤僅適用於子查詢。本節將描述這些錯誤。
不支援的子查詢語法
ERROR 1235 (ER_NOT_SUPPORTED_YET) SQLSTATE = 42000 Message = "This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'"
這表示 MySQL 不支援以下語句
SELECT * FROM t1 WHERE s1 IN (SELECT s2 FROM t2 ORDER BY s1 LIMIT 1)
子查詢傳回的欄數不正確
ERROR 1241 (ER_OPERAND_COL) SQLSTATE = 21000 Message = "Operand should contain 1 column(s)"
當出現以下情況時,會發生此錯誤
SELECT (SELECT column1, column2 FROM t2) FROM t1;
如果目的是進行列比較,您可以使用傳回多個欄的子查詢。在其他情況下,子查詢必須是純量運算元。請參閱第 15.2.15.5 節「列子查詢」。
子查詢傳回的列數不正確
ERROR 1242 (ER_SUBSELECT_NO_1_ROW) SQLSTATE = 21000 Message = "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 = HY000 Message = "You can't specify target table 'x' for update in FROM clause"
當嘗試修改表格並在子查詢中從同一個表格選取時,會發生此錯誤,例如以下情況
UPDATE t1 SET column2 = (SELECT MAX(column1) FROM t1);
您可以使用通用資料表運算式或衍生資料表來解決這個問題。請參閱第 15.2.15.12 節「子查詢的限制」。
本節中描述的所有錯誤也適用於在子查詢中使用 TABLE
時。
對於交易式儲存引擎,子查詢的失敗會導致整個陳述式失敗。對於非交易式儲存引擎,在遇到錯誤之前所做的資料修改將被保留。