Làm thế nào để chèn giá trị vào một bảng từ hai bảng khác nhau?


12

Tôi có ba bàn

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)

Nếu tôi được đặt tên giáo viên ( davidví dụ) và student_id ( 7ví dụ) và yêu cầu để chèn teacher_idvào classroombảng dựa trên idtrong teachersbảng, tôi sẽ làm:

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

Bây giờ, nếu tôi không được cung cấp trực tiếp id của sinh viên và chỉ được cung cấp tên của sinh viên thì sao? Giả sử tôi được đặt tên giáo viên 'david' và tên sinh viên 'sam'. Làm thế nào để tôi nhận được teacher_idtừ teachersbảng và cũng student_idtừ studentsbảng và chèn cả vào classroombảng dựa trên tên của mình?

Câu trả lời:


15

Bạn sẽ viết truy vấn như thế này

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

Hãy cẩn thận. Đây là một sản phẩm của Cartesian. Một cách khác để tiếp cận điều này là

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

Cảm ơn ngài, tôi có thể sử dụng tham gia nội bộ ở đây?
Baba Kamdev

Không cần cho một INNER JOINkể từ teachersstudentskhông có mối quan hệ khóa nước ngoài.
RolandoMySQLDBA

6

Cách dễ nhất bạn có thể làm điều này là sử dụng các truy vấn phụ:

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

Điều này sẽ đặt mẫu kết quả đầu tiên value1N, value2N, value3Nvà kết quả từ secondtablevalueN4

Kết quả:

  • bảng đầu tiên --- |username|password |name|--- (có 3 giá trị, nhưng chúng tôi sử dụng một giá trị)
  • bảng thứ hai --- |id_number|Adress|tel|--- (có 3 giá trị, chúng tôi sử dụng tất cả)
  • newtable sau khi truy vấn sẽ được điền --- |id_number|Adress|tel|username|----- (chúng tôi nhận được 4 giá trị: 3 từ bảng thứ hai và 1 từ bảng đầu tiên:
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.