0

Tengo tres tablas en MySQL:

-evaluacion_laboral (id, meta, compromiso, evidencia, evaluacion, id_trabajador)
-metas_cargo (id, meta, compromiso, evidencia, cargo)
-trabajador(id, nombre, cargo)

Quiero saber una secuencia que me permita seleccionar datos de las tablas trabajador y metas_cargo:

  1. el id de todos los trabajadores con cargo 'ingeniero'

     select id from trabajador where cargo = 'ingeniero' 
    
  2. seleccionar todas las metas,compromisos,evidencias con cargo 'ingeniero' de la tabla metas_cargo

     select meta,compromiso,evidencia from metas_cargo where cargo = 'ingeniero'
    
  3. estos datos de ambas tablas como quiera que sea que devuelve muchos trabajadores y muchos resultados de metas,compromiso,evidencia; insertarlos todos (trabajador.id, metas_cargo.metas, metas_cargo.compromiso, metas_cargo.evidencia) dentro de la tabla evaluacion_laboral.

PD: Anteriormente iba pasando los campos de una tabla a otra así con el id del trabajador (ejemplo id trabajador = 2):

INSERT INTO evaluacion_laboral (meta, compromiso, evidencia, id_trabajador) 
SELECT meta, compromiso, evidencia, 2 FROM metas_cargo WHERE cargo = 'ingeniero'

pero con el id de trabajador el problema es que de esta forma debo ir uno por uno, y ahora son mas de 2 mil trabajadores y requiero secuencia para pasarlos todos.

Diego Rueda
  • 519
  • 2
  • 15
SabanaSabrosa
  • 79
  • 1
  • 9

2 Answers2

1

Puedes lanzar una sentencia insert/select, lo cual lleva directamente los datos devueltos por el la sentencia select a la tabla destino.

Lo primero es construir una consulta que te devuelva todos los datos que quieres. Esto vamos a lograrlo haciendo un join entre las tablas, por ejemplo, por el campo puesto, lo que nos permite filtrar para quedarnos con aquellos que nos interesan, que son los de ingeniero.

Una posible consulta, podría ser:

select trabajador.nombre, metas_cargo.meta, metas)cargo.compromiso, metas_cargo.evidencia
  from trabajador 
       inner join metas_cargo on metas_cargo.cargo = trabajador.cargo
 where trabajador.cargo = 'ingeniero'

Ahora, ajustamos los campos a lo esperado por nuestra tabla evaluacion_laboral y preparamos la sentencia insert/select, teniendo cuidado que los campos del insert coincidan, en orden, tipo y número, con los campos del select, por ejemplo:

insert into evaluacion_laboral (meta, compromiso, evidencia, evaluacion, id_trabajador)
select metas_cargo.meta, metas_cargo.compromiso, metas_cargo.evidencia, trabajador.id
  from trabajador 
       inner join metas_cargo on metas_cargo.cargo = trabajador.cargo
 where trabajador.cargo = 'ingeniero'

Estoy asumiendo, para esto, que el campo id de la tabla evaluacion_laboral es auto-incremental, si no lo es, te tocaría incluir el valor de dicho campo, para cada fila, como parte del select.

jachguate
  • 25,659
  • 7
  • 35
  • 61
0

Te recomiendo usar un INNER JOIN haciendo un SELECT de solo los campos que necesites.

Por ejemplo, si de tu tabla "evaluacionLaboral" necesitas: meta, compromiso, evidencia, id_trabajador y de tu tabla "trabajador" solo necesitas: id_trabajador, nombre, cargo

Hacer una query como la siguiente:

SELECT   evaluacionLaboral.meta, evaluacionLaboral.evidencia, evaluacionLaboral.id_trabajador, trabajador.nombre, trabajador.cargo FROM evaluacionLaboral INNER JOIN trabajador on evaluacionLaboral.id_trabajador = trabajador.id_trabajador WHERE trabajador.cargo = "INGENIERO"

Es un ejemplo basado en parte en las tablas que mostraste, pero de ahí ya entederás la lógica necesaria para tu query.

Para la parte de inserción puedes esperar el resultado de esta query y hacer un select sencillo o usar una sub-query.

jachguate
  • 25,659
  • 7
  • 35
  • 61