Как вставить много строк в две относительные таблицы в MySQL? - PullRequest
0 голосов
/ 22 января 2019

Я хочу вставить много строк в две относительные таблицы.Я использовал LAST_INSERTED_ID () для вставки данных во вторую таблицу, но этот идентификатор не меняется

BEGIN; 
insert into themes (tutorID, year, theme_name, degreeID) 
  select tutorID, year, work_name, degreeID from journal;
INSERT INTO assigned_students (studentID, tutorID, themeID, writing_language_id, work_typeID) 
  select studentID, tutorID, LAST_INSERT_ID(), 0, 4 from journal; 
COMMIT

Ответы [ 2 ]

0 голосов
/ 22 января 2019

Сделайте вставки в assign_students, ссылающиеся на только что вставленные строки из themes (чтобы вы могли получить их автоматически сгенерированные идентификаторы) также:

BEGIN; 
  insert into themes (tutorID, year, theme_name, degreeID) 
    select themeID, year, work_name, degreeID from journal; 
  INSERT INTO assigned_students (studentID, tutorID, themeID, writing_language_id, work_typeID) 
    select j.studentID, j.tutorID, t.THEME_ID_COLUMN_NAME, 0, 4 
    from 
      journal j 
      inner join themes t on j.themeID = t.tutorid; 
COMMIT

Здесь мы видим, что сначала мы делаем некоторые вставки в темы, и я предполагаю, что он автоматически сгенерирует некоторые идентификаторы для столбца pk тем.

Итак, мы присоединяем журнал к тем строкам, которые мы вставили, чтобы мы могли получить сгенерированные идентификаторы

Я не знаю, как называется столбец PK в themes, поэтому вам придется заменить THEME_ID_COLUMN_NAME на правильное значение

Обратите внимание, что вам может потребоваться указать дополнительные столбцы в on j.themeID = t.tutorid, а не только tutorid, если это не уникально идентифицирует строку

I читайте также , что для автоинкрементных столбцов гарантируется, что идентификаторы являются последовательными, поэтому вы можете получить LAST_INSERTED_ID (), которая является самой последней вставленной строкой), а также ROW_COUNT и, следовательно, знать диапазон идентификаторов, которые были вставлены, и используйте их для выбора / объединения данных журнала

0 голосов
/ 22 января 2019

Попробуйте, где вы объявляете INT, а затем устанавливаете это значение, см. Ниже.

BEGIN;

declare lastid INT;

insert into table1 (tutorID, year, name, degreeID)
  select sm.tutorID, year, namework, dt.degreeID from table3;

set lastid = (SELECT LAST_INSERT_ID());

INSERT INTO table2 (studentID, tutorID, table1ID, writing_language_id, work_typeID)
  select distinct StudentID, tutorID, lastid , 0, 4 from table3;
COMMIT;

Вы также можете попробовать это.

BEGIN;

insert into table1 (tutorID, year, name, degreeID)
  select sm.tutorID, year, namework, dt.degreeID from table3;

INSERT INTO table2 (studentID, tutorID, table1ID, writing_language_id, work_typeID)
  select distinct StudentID, tutorID, (SELECT LAST_INSERT_ID()), 0, 4 from table3;
COMMIT;
...