文件首頁
MySQL 9.0 參考手冊
相關文件 下載本手冊
PDF (美式信紙) - 40.0Mb
PDF (A4) - 40.1Mb
Man Pages (TGZ) - 258.2Kb
Man Pages (Zip) - 365.3Kb
Info (Gzip) - 4.0Mb
資訊 (Zip) - 4.0Mb


MySQL 9.0 參考手冊  /  ...  /  子查詢錯誤

15.2.15.10 子查詢錯誤

有些錯誤僅適用於子查詢。本節將描述這些錯誤。

  • 不支援的子查詢語法

    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 時。

對於交易式儲存引擎,子查詢的失敗會導致整個陳述式失敗。對於非交易式儲存引擎,在遇到錯誤之前所做的資料修改將被保留。