วิธีแทรกค่าลงในตารางจากสองตารางที่แตกต่างกันอย่างไร


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';

ทีนี้จะเกิดอะไรขึ้นถ้าฉันไม่ได้รับรหัสนักเรียนโดยตรงและให้เฉพาะชื่อนักเรียน? สมมติว่าฉันได้รับชื่อครู 'david' และชื่อนักเรียน 'sam' ฉันจะรับ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);

ขอบคุณคุณฉันสามารถใช้การเข้าร่วมภายในที่นี่ได้ไหม
Baba Kamdev

ไม่จำเป็นสำหรับการ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 จากตารางแรก:
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.