Как вставить значения в таблицу из двух разных таблиц?


12

У меня три стола

students table 
------------------------------------  
id(PK, A_I)  |  student_name | nationality

teachers table
------------------------------------
id(PK, A_I)  |  teacher_name |  email

classroom table
----------------------
id(PK, A_I)   | date   | teacher_id(FK to teachers.id)  |  student_id(FK to students.id)

Если бы я получил имя учителя ( davidк примеру) и student_id ( 7к примеру) и попросил , чтобы вставить teacher_idв classroomтаблицу , основанной на idв teachersтаблице, я хотел бы сделать:

insert into classroom (date, teacher_id, student_id)
select '2014-07-08', id, 7
from teachers
where teacher_name = 'david';

Теперь, что, если мне не дали идентификационный номер студента непосредственно и дали только имя студента? Предположим, мне дали имя учителя «Давид» и имя студента «Сэм». Как я могу получить teacher_idиз teachersтаблицы, а также student_idиз studentsтаблицы и вставить оба в classroomтаблицу на основе их соответствующих имен?

Ответы:


15

Вы бы написали запрос так

insert into classroom (date, teacher_id, student_id)
select '2014-07-08', t.id, s.id
from teachers t,students s
where t.teacher_name = 'david'
and s.student_name = 'sam';

Быть осторожен. Это декартово произведение. Другой способ приблизиться к этому

select teacher_id into @tid from teachers where teacher_name = 'david';
select student_id into @sid from students where student_name = 'sam';
insert into classroom (date, teacher_id, student_id) values ('2014-07-08',@tid,@sid);

Спасибо, сэр, могу ли я использовать внутреннее соединение здесь?
Баба Камдев

Нет необходимости с INNER JOINтех пор teachersи не studentsиметь отношения с внешним ключом.
RolandoMySQLDBA

6

Самый простой способ сделать это - использовать подзапросы:

 INSERT INTO classroom(teacher_id,student_id)
 VALUES ((SELECT id FROM students WHERE s_name='sam'),
 (SELECT id FROM teacher WHERE t_name='david'));

1
INSERT INTO newtable(value1, value2, value3) 
SELECT value1N, value2N, value3N,(SELECT valueN4 FROM secondtable WHERE id='1') 
FROM firsttable WHERE id='1');

Это поместит форму результата в первую таблицу value1N, value2N, value3Nи результат из второй таблицыvalueN4

Результат:

  • первая таблица --- |username|password |name|--- (имеет 3 значения, но мы используем одно)
  • вторая таблица --- |id_number|Adress|tel|--- (имеет 3 значения, мы используем все)
  • newtable после запроса будет заполнен --- |id_number|Adress|tel|username|----- (мы получаем 4 значения: 3 из второй таблицы и 1 из первой таблицы:
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.