Bagaimana cara memasukkan nilai ke dalam tabel dari dua tabel yang berbeda?


12

Saya punya tiga meja

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)

Jika saya diberi nama guru ( davidmisalnya) dan student_id ( 7misalnya) dan diminta untuk memasukkan teacher_idke dalam classroomtabel berdasarkan idpada teacherstabel, saya akan melakukan:

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

Sekarang, bagaimana jika saya tidak diberi id siswa secara langsung dan hanya diberi nama siswa? Misalkan saya diberi nama guru 'david' dan nama siswa 'sam'. Bagaimana cara mendapatkan tabel teacher_iddari teachersdan student_iddari studentstabel dan memasukkan keduanya ke dalam classroomtabel berdasarkan nama masing-masing?

Jawaban:


15

Anda akan menulis kueri seperti ini

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

Hati-hati. Ini adalah produk Cartesian. Cara lain untuk mendekati ini adalah

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

Terima kasih pak, bisakah saya menggunakan inner join di sini?
Baba Kamdev

Tidak perlu INNER JOINkarena teachersdan studentstidak memiliki hubungan kunci asing.
RolandoMySQLDBA

6

Cara termudah yang dapat Anda lakukan adalah menggunakan sub-kueri:

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

Ini akan menempatkan formulir hasil firsttable value1N, value2N, value3Ndan hasil dari secondtablevalueN4

Hasil:

  • tabel pertama --- |username|password |name|--- (memiliki 3 nilai, tetapi kami menggunakan satu)
  • tabel kedua --- |id_number|Adress|tel|--- (memiliki 3 nilai, kami menggunakan semua)
  • newtable setelah query akan diisi --- |id_number|Adress|tel|username|----- (kita mendapatkan 4 nilai: 3 dari tabel kedua dan 1 dari tabel pertama:
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.