文件首頁
MySQL 8.4 參考手冊
相關文件 下載本手冊
PDF (US Ltr) - 39.9Mb
PDF (A4) - 40.0Mb
Man Pages (TGZ) - 258.5Kb
Man Pages (Zip) - 365.5Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


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

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 時,本節中描述的所有錯誤也適用。

對於交易儲存引擎,子查詢的失敗會導致整個語句失敗。對於非交易儲存引擎,在發生錯誤之前所做的資料修改會被保留。