Як вставити значення в таблицю з двох різних таблиць?


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 значення, ми використовуємо всі)
  • Нова таблиця після запиту буде заповнена --- |id_number|Adress|tel|username|----- (ми отримуємо 4 значення: 3 з другої таблиці та 1 з першої таблиці:
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.