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
など)が与えられ、classroom
テーブルのid
に基づいてteachers
テーブルにteacher_id
を挿入するように依頼された場合、次のようにします。
insert into classroom (date, teacher_id, student_id)
select '2014-07-08', id, 7
from teachers
where teacher_name = 'david';
ここで、学生のIDを直接指定せず、学生の名前のみを指定した場合はどうなりますか?私に教師の名前「david」と学生の名前「sam」が与えられたとします。 teachers
テーブルからteacher_id
を取得し、students
テーブルからstudent_id
を取得して、それぞれの名前に基づいて両方をclassroom
テーブルに挿入するにはどうすればよいですか?
あなたはこのようなクエリを書くでしょう
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);
これを行う最も簡単な方法は、サブクエリを使用することです。
INSERT INTO classroom(teacher_id,student_id)
VALUES ((SELECT id FROM students WHERE s_name='sam'),
(SELECT id FROM teacher WHERE t_name='david'));
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
とsecondtableの結果valueN4
|username|password |name|
---(3つの値がありますが、1つの値を使用します)|id_number|Adress|tel|
---(3つの値があり、すべて使用します)|id_number|Adress|tel|username|
-----(4つの値を取得:2番目のテーブルから3つ、最初のテーブルから1つ: