これらはサブクエリーにだけ適応するエラーです。この節では、それらについて説明していきます。
サポートされていないサブクエリー構文
ERROR 1235 (ER_NOT_SUPPORTED_YET) SQLSTATE = 42000 Message = "This version of MySQL does not yet support 'LIMIT & IN/ALL/ANY/SOME subquery'"
これは、次の形のステートメントはまだ機能しないと言う意味です。
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;
もし比較することが目的であれば、複合カラムを帰すサブクエリーを利用すると良いでしょう。ほかのコンテキストでは、サブクエリーはスカラーオペランドである必要があります。項8.2.9.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 が行を 1
              つだけ返せば、その前のクエリーは機能します。もしサブクエリーが複数の行を返せば、エラー
              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);
              サブクエリーは、SELECT
              ステートメント同様
              UPDATE と
              DELETE
              ステートメント内で正当なので、UPDATE
              ステートメント内で、割り当てのためにサブクエリーを利用することができます。しかし、同じテーブルを
              (この場合、テーブル
              t1)
              サブクエリーの
              FROM
              節と更新ターゲットの両方に対して利用することはできません。
            
トランザクションストレージエンジンに対しては、サブクエリーの失敗は、ステートメント全体の失敗を引き起こします。非トランザクションストレージエンジンの場合、エラーが検出される前に行われたデータ変更は保持されます。

