Comment insérer des valeurs dans une table à partir de deux tables différentes?

12

J'ai trois tables

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)

Si on me donnait le nom de l'enseignant ( davidpar exemple) et student_id ( 7par exemple) et qu'on me demandait d'insérer le teacher_iddans le classroomtableau en fonction du iddans le teacherstableau, je ferais:

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

Maintenant, que se passe-t-il si je n'ai pas reçu directement l'ID de l'élève et que je n'ai reçu que le nom de l'élève? Supposons que l'on m'ait donné le nom de l'enseignant «david» et le nom de l'élève «sam». Comment puis-je obtenir la teacher_idde teacherstable et aussi student_idde la studentstable et insérer à la fois dans la classroomtable en fonction de leurs noms respectifs?

Baba Kamdev
la source

Réponses:

15

Vous écririez la requête comme ceci

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

Faites attention. Ceci est un produit cartésien. Une autre façon d'aborder cela est

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
la source
Merci monsieur, puis-je utiliser la jointure intérieure ici?
Baba Kamdev
Pas besoin d'un INNER JOINdepuis teacherset studentsn'avez aucune relation de clé étrangère.
RolandoMySQLDBA
6

La façon la plus simple de le faire est d'utiliser des sous-requêtes:

 INSERT INTO classroom(teacher_id,student_id)
 VALUES ((SELECT id FROM students WHERE s_name='sam'),
 (SELECT id FROM teacher WHERE t_name='david'));
Je ne suis pas un robot
la source
1
INSERT INTO newtable(value1, value2, value3) 
SELECT value1N, value2N, value3N,(SELECT valueN4 FROM secondtable WHERE id='1') 
FROM firsttable WHERE id='1');

Cela mettra le formulaire de résultat firsttable value1N, value2N, value3Net le résultat de secondtablevalueN4

Résultat:

  • première table --- |username|password |name|--- (a 3 valeurs, mais nous en utilisons une)
  • deuxième tableau --- |id_number|Adress|tel|--- (a 3 valeurs, nous utilisons tous)
  • newtable après que la requête sera remplie --- |id_number|Adress|tel|username|----- (nous obtenons 4 valeurs: 3 de la deuxième table et 1 de la première table:
Ile Danilov
la source