12

明らかに以下は誤りです。

INSERT INTO `aTable` (`A`,`B`) VALUES((SELECT MAX(`A`) FROM `aTable`)*2),'name');

私は値を取得します:

SQL クエリ:

INSERT INTO `aTable` (`A`, `B` )
VALUES 
(
  (
   SELECT MAX(`A`)
   FROM `aTable`
  ) *2
 , 'name'
)

MySQL は次のように述べています。

1093 - FROM 句で更新するターゲット テーブル 'aTable' を指定することはできません

したがって、ビットマップ テーブルを作成しようとしています。各行は 1 ビットに対応し、「マップ」値を持ちます。

テーブルに挿入するには、2 つのクエリを実行するのではなく、1 つのクエリを実行したいのです。どうすればいいですか?

誰もこれについてコメントしていませんが、ビットマップを作成しようとしているので、^ 2 ではなく * 2 にする必要があります。私の間違いです。読んだ。

4

5 に答える 5

17

試す:

insert into aTable select max(a)^2, 'name' from aTable;

また

insert into aTable select max(a)^2, 'name' from aTable group by B;

結合が必要な場合は、次のようにします。

insert into aTable select max(a)^2, 'name' from aTable, bTable;

私の「サーバー バージョン」は「5.0.51b-community-nt MySQL Community Edition (GPL)」です。

于 2008-10-15T18:22:20.627 に答える
10

実際には、挿入時にテーブルに別名を付けることができます。私はこの質問をいたるところで見てきましたが、誰もそれを試みたようには見えません。サブクエリを使用してテーブルから最大値を取得しますが、サブクエリでテーブルにエイリアスを設定します。

INSERT INTO tableA SET fieldA = (SELECT max(x.fieldA) FROM tableA x)+1;

対応するセカンダリ キーがあり、対応するセカンダリ キーの FIRST レコードを挿入する、より複雑な例:

INSERT INTO tableA SET secondaryKey = 123, fieldA = COALESCE((SELECT max(x.fieldA) FROM tableA x WHERE x.secondaryKey = 123)+1,1);

テーブルにエイリアスを設定すると、エラーは発生せず、機能しているように見えます。何かをコーディングしているときにこれを行いましたが、上記のばかげた構文エラーがあるかどうかはわかりませんが、そのタイプの構文を試してみます。

于 2011-10-31T22:42:52.430 に答える
5

INSERT ... SELECTが機能していないと思いますか?私はそれのドキュメントでこれを見ます:

INSERTステートメントのターゲットテーブルは、クエリのSELECT部分​​のFROM句に表示される場合があります。(これは、MySQLの一部の古いバージョンでは不可能でした。)この場合、MySQLはSELECTからの行を保持する一時テーブルを作成し、それらの行をターゲットテーブルに挿入します。

好奇心から、どのバージョンのMySQLを使用していますか?

于 2008-10-15T15:47:27.070 に答える
2

「VALUES」を削除し、有効な選択ステートメントが必要だと思います。

このリンクを参照してください

私は特に mySQL 派というわけではなく、主に MSSQL を使用しています。ただし、選択ステートメントを正しくフォーマットすると、機能するはずです。

于 2008-10-15T15:35:43.193 に答える
-3

選択が正しくなるとすぐにこれを行うことができます。

于 2008-10-15T15:42:48.577 に答える