Wie füge ich Werte aus zwei verschiedenen Tabellen in eine Tabelle ein?

12

Ich habe drei Tische

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)

Wenn mir der Name des Lehrers ( davidzum Beispiel) und die student_id ( 7zum Beispiel) gegeben und ich gebeten würde, die teacher_idin die classroomTabelle einzufügen, basierend auf der idin der teachersTabelle, würde ich Folgendes tun:

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

Was wäre, wenn ich nicht direkt den Studentenausweis und nur den Namen des Studenten erhalten hätte? Angenommen, ich habe den Lehrernamen 'david' und den Schülernamen 'sam' erhalten. Wie bekomme ich die teacher_idfrom- teachersTabelle und auch student_iddie studentstable und füge beide classroomanhand ihrer jeweiligen Namen in die table ein?

Baba Kamdev
quelle

Antworten:

15

Sie würden die Abfrage so schreiben

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

Achtung. Dies ist ein kartesisches Produkt. Ein anderer Weg, dies zu erreichen, ist

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);
RolandoMySQLDBA
quelle
Vielen Dank, Sir, kann ich hier Inner Join verwenden?
Baba Kamdev
Kein Bedarf an einem INNER JOINSeit teachersund studentskeine Fremdschlüsselbeziehung.
RolandoMySQLDBA
6

Am einfachsten geht das mit Unterabfragen:

 INSERT INTO classroom(teacher_id,student_id)
 VALUES ((SELECT id FROM students WHERE s_name='sam'),
 (SELECT id FROM teacher WHERE t_name='david'));
Ich bin kein Roboter
quelle
1
INSERT INTO newtable(value1, value2, value3) 
SELECT value1N, value2N, value3N,(SELECT valueN4 FROM secondtable WHERE id='1') 
FROM firsttable WHERE id='1');

Dadurch wird value1N, value2N, value3Ndas Ergebnis aus der ersten Tabelle und das Ergebnis aus der zweiten Tabelle abgelegtvalueN4

Ergebnis:

  • erste Tabelle --- |username|password |name|--- (hat 3 Werte, aber wir verwenden einen)
  • zweite Tabelle --- |id_number|Adress|tel|--- (hat 3 Werte, wir verwenden alle)
  • Newtable nach Abfrage wird gefüllt --- |id_number|Adress|tel|username|----- (wir erhalten 4 Werte: 3 aus der zweiten Tabelle und 1 aus der ersten Tabelle:
Ile Danilov
quelle