web-dev-qa-db-fra.com

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

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 m'a donné le nom de l'enseignant (david par exemple) et student_id (7 par exemple) et a demandé d'insérer le teacher_id dans la table classroom basée sur la id dans la table teachers, 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 obtenir le teacher_id de teachers table et aussi student_id de la table students et insérer les deux dans la table classroom en fonction de leurs noms respectifs?

12
Baba Kamdev

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

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'));
6
Nivedita
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, value3N et le résultat de la deuxième table valueN4

Résultat:

  • premier tableau ---|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:
1
Ile Danilov