¿Cómo insertar valores en una tabla de dos tablas diferentes?


12

Tengo tres mesas

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 me dieran el nombre del profesor ( davidpor ejemplo) y student_id ( 7por ejemplo) y me pidieran que inserte el teacher_iden la classroomtabla en función de idla teacherstabla, haría:

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

Ahora, ¿qué pasa si no me dieron la identificación del estudiante directamente y solo me dieron el nombre del estudiante? Supongamos que me dieron el nombre del maestro 'David' y el nombre del estudiante 'Sam'. ¿Cómo obtengo la tabla teacher_idfrom teachersy también student_idla studentstabla e inserto ambas en la classroomtabla según sus respectivos nombres?

Respuestas:


15

Escribirías la consulta así

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

Ten cuidado. Este es un producto cartesiano. Otra forma de abordar esto es

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

Gracias señor, ¿puedo usar la unión interna aquí?
Baba Kamdev

No hay necesidad de un INNER JOINsincero teachersy studentsno tiene una relación de clave externa.
RolandoMySQLDBA

6

La forma más fácil de hacerlo es mediante subconsultas:

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

Esto pondrá el resultado de la primera tabla value1N, value2N, value3Ny el resultado de la segunda tabla.valueN4

Resultado:

  • primera tabla --- |username|password |name|--- (tiene 3 valores, pero usamos uno)
  • segunda tabla --- |id_number|Adress|tel|--- (tiene 3 valores, usamos todos)
  • Newtable después de la consulta se llenará --- |id_number|Adress|tel|username|----- (obtenemos 4 valores: 3 de la segunda tabla y 1 de la primera tabla:
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.