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?
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);
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'));
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
|username|password |name|
--- (a 3 valeurs, mais nous en utilisons une)|id_number|Adress|tel|
--- (a 3 valeurs, nous utilisons tous)|id_number|Adress|tel|username|
----- (nous obtenons 4 valeurs: 3 de la deuxième table et 1 de la première table: