ホームページ >データベース >mysql チュートリアル >MySQL INSERT-SELECT クエリが「オペランドには 1 つの列を含める必要があります」を返すのはなぜですか?
MySQL 構文エラー: INSERT-SELECT クエリで「オペランドには 1 つの列を含める必要があります」
INSERT-SELECT の実行時クエリを実行すると、MySQL が「オペランドには 1 つの列を含める必要があります」というエラーをスローする場合があります。この問題をトラブルシューティングするには、次の点を考慮してください。
構文
INSERT-SELECT クエリの正しい構文は次のとおりです。
INSERT INTO DestinationTable (DestinationColumns) SELECT SelectColumns FROM SourceTable WHERE Conditions;
指定されたクエリ:
INSERT INTO VOUCHER (VOUCHER_NUMBER, BOOK_ID, DENOMINATION) SELECT (a.number, b.ID, b.DENOMINATION) FROM temp_cheques a, BOOK b WHERE a.number BETWEEN b.START_NUMBER AND b.START_NUMBER+b.UNITS-1;
SELECT 句の括弧が正しくありません。それらを削除すると、次の結果が得られます。
INSERT INTO VOUCHER (VOUCHER_NUMBER, BOOK_ID, DENOMINATION) SELECT a.number, b.ID, b.DENOMINATION FROM temp_cheques a, BOOK b WHERE a.number BETWEEN b.START_NUMBER AND b.START_NUMBER+b.UNITS-1;
データ サイズ
構文を修正した後もエラーが解決しない場合は、クエリに含まれるデータのサイズを考慮してください。 MySQL では、SELECT ステートメントによって返される行の数 (MAX_JOIN_SIZE) が制限されています。大規模なデータセットでこのエラーを回避するには、クエリを実行する前に
SET SQL_BIG_SELECTS = 1;
を実行します。これにより制限が増加し、クエリが正常に実行できるようになります。
例
修正された構文を使用し、SQL_BIG_SELECTS を設定すると、変更されたクエリは次のようになります。
SET SQL_BIG_SELECTS = 1; INSERT INTO VOUCHER (VOUCHER_NUMBER, BOOK_ID, DENOMINATION) SELECT a.number, b.ID, b.DENOMINATION FROM temp_cheques a, BOOK b WHERE a.number BETWEEN b.START_NUMBER AND b.START_NUMBER+b.UNITS-1;
このクエリを実行して、temp_cheques のデータを VOUCHER に挿入します。テーブル。
以上がMySQL INSERT-SELECT クエリが「オペランドには 1 つの列を含める必要があります」を返すのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。