0

私はこのテーブルを持っています(それを呼び出しますtableA):

id (PK, autoincrement)
field1 (integer)
field2 (integer)

そして、次のように、別のテーブルからいくつかのレコードを挿入したい:

INSERT INTO tableA (field1, field2)
SELECT *something*, tableB.field2
FROM tableB;

ここで必要なのは、field1各行に新しい整数を入力することです。これは、id塗りつぶし (" MAX(field1)+1" のようなもの) と同様です。おそらくサブクエリを使用して、これを行う方法はありますか?

4

2 に答える 2

1

ここに同時実行の問題がないことを100%確信しているわけではありませんが、次のようなトリガーから始めます。

CREATE TRIGGER ins_your_table BEFORE INSERT ON your_table 
FOR EACH ROW
  SET new.field1=case when new.field1 is null then
      coalesce((select max(field1)+1 from your_table),1)
    else new.field1 end
;

insert into your_table (field1, field2) values (10, 1),(11, 2),(12, 3);

select * from your_table;

| ID | FIELD1 | FIELD2 |
------------------------
|  1 |     10 |      1 |
|  2 |     11 |      2 |
|  3 |     12 |      3 |

delete from your_table;

insert into your_table (field1, field2) values (10, 1),(11, 2),(12, 3);
insert into your_table (field2) values (4),(5),(6);

select * from your_table;

| ID | FIELD1 | FIELD2 |
------------------------
|  1 |     10 |      1 |
|  2 |     11 |      2 |
|  3 |     12 |      3 |
|  4 |     13 |      4 |
|  5 |     14 |      5 |
|  6 |     15 |      6 |

このフィドルのいくつかの例を参照してください。

于 2013-01-04T20:27:58.270 に答える
0

私はこれを思いついた:

SET @newVAL = (SELECT MAX(field1) FROM tableA);
INSERT INTO tableA (field1, field2)
SELECT @newVAL := @newVAL+1, tableB.field2
FROM tableB

アイデアは、最初にのMAX値を取得し、field1それを変数に格納してから、選択した各行で増分することです。

于 2013-01-04T19:59:53.980 に答える