2つの異なるテーブルからテーブルに値を挿入する方法は?


12

私は3つのテーブルを持っています

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_idclassroomidteachers

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

さて、学生のIDを直接与えられず、学生の名前だけを与えられたらどうなりますか?私は教師の名前「デビッド」と学生の名前「サム」を与えられたと仮定します。どうすれば入手できます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);

ありがとうございます、ここで内部結合を使用できますか?
ババKamdev 14

必要はありませんINNER JOIN以来teachersstudents外部キーの関係を持っていません。
RolandoMySQLDBA 14

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、結果がfirsttableから、secondtableからの結果が作成されますvalueN4

結果:

  • 最初のテーブル--- |username|password |name|---(3つの値がありますが、1つ使用します)
  • 2番目のテーブル--- |id_number|Adress|tel|---(3つの値があり、すべてを使用します)
  • クエリ後のnewtableは埋められます--- |id_number|Adress|tel|username|-----(4つの値を取得します:2番目のテーブルから3、1 番目のテーブルから1:
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.