ホームページ >データベース >mysql チュートリアル >MySQL INSERT-SELECT クエリが「オペランドには 1 つの列を含める必要があります」を返すのはなぜですか?

MySQL INSERT-SELECT クエリが「オペランドには 1 つの列を含める必要があります」を返すのはなぜですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-12-20 08:43:10140ブラウズ

Why Does My MySQL INSERT-SELECT Query Return

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。