Jak wstawić wartości do tabeli z dwóch różnych tabel?


12

Mam trzy stoły

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)

Jeśli dano mi imię nauczyciela ( davidna przykład) i student_id ( 7na przykład) i poprosił, aby wstawić teacher_iddo classroomtabeli opartej na idw teacherstabeli, chciałbym zrobić:

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

A co, jeśli nie otrzymam bezpośrednio identyfikatora studenta i podam tylko nazwisko studenta? Załóżmy, że otrzymałem imię nauczyciela „dawid” i imię ucznia „sam”. Jak mogę dostać teacher_idod teachersstołu, a także student_idod studentsstołu i wkładka zarówno do classroomtabeli na podstawie ich nazw?

Odpowiedzi:


15

Możesz napisać zapytanie w ten sposób

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

Bądź ostrożny. To jest produkt kartezjański. Innym sposobem podejścia do tego jest

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

Dziękuję, proszę pana, czy mogę tutaj użyć połączenia wewnętrznego?
Baba Kamdev

Nie ma potrzeby INNER JOINodtąd teachersi studentsnie ma relacji klucza obcego.
RolandoMySQLDBA

6

Najłatwiejszym sposobem na to jest skorzystanie z zapytań cząstkowych:

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

Spowoduje to umieszczenie wyniku z tabeli pierwszej value1N, value2N, value3Ni wyniku z tabeli drugiejvalueN4

Wynik:

  • pierwsza tabela --- |username|password |name|--- (ma 3 wartości, ale używamy jednej)
  • druga tabela --- |id_number|Adress|tel|--- (ma 3 wartości, używamy wszystkich)
  • nowa tabela po zapytaniu zostanie wypełniona --- |id_number|Adress|tel|username|----- (otrzymujemy 4 wartości: 3 z drugiej tabeli i 1 z pierwszej tabeli:
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.