İki farklı tablodan tabloya değerler nasıl eklenir?


12

Üç masam var

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)

Ben öğretmenin (adı verildi ise davidörneğin) ve (student_id 7örneğin) ve eklemek istedi teacher_idiçine classroomdayanan tabloda idyer teacherstabloda, ben yapardım:

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

Şimdi, öğrencinin kimliğine doğrudan verilmez ve sadece öğrencinin adını verirsem ne olur? Diyelim ki öğretmenin adı 'david' ve öğrencinin adı 'sam'. Nasıl alırım teacher_iddan teachersmasa ve ayrıca student_idgelen studentsiçine masa ve hem insert classroomkendi adlarına göre tabloda?

Yanıtlar:


15

Sorguyu şöyle yazarsınız

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

Dikkatli ol. Bu Kartezyen bir üründür. Buna yaklaşmanın bir başka yolu da

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

Teşekkür ederim efendim, iç birleştirmeyi burada kullanabilir miyim?
Baba Kamdev

O INNER JOINzamandan beri gerek yok teachersve studentsyabancı anahtar ilişkisi yok.
RolandoMySQLDBA

6

Bunu yapmanın en kolay yolu alt sorgular kullanmaktır:

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

Bu sonuç formunu ilk tabloya value1N, value2N, value3Nve sonucu ikinci tabloya yerleştirirvalueN4

Sonuç:

  • ilk tablo --- |username|password |name|--- (3 değeri vardır, ancak bir tane kullanırız)
  • ikinci tablo --- |id_number|Adress|tel|--- (3 değeri vardır, hepsini kullanıyoruz)
  • sorgudan sonra yenisi doldurulacaktır --- |id_number|Adress|tel|username|----- (4 değer alırız: ikinci tablodan 3 ve ilk tablodan 1:
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.