Pregunta:
Ayuda consulta SQL?
Ia.
2009-04-13 06:33:19 UTC
Suponiendo que tengo una tabla llamada "empleados" con sus respectivas columnas(idEmpleado, nombre) y otra tabla llamada "trabajos" con sus respectivas columnas(idTrabajo,nombreTrabajo,puesto1... en las cuales tanto la columna puesto1 y la columna puesto2 almacenan el id de algún empleado de la tabla "empleados".

Necesitaría hacer una consulta similar a la que voy dar de ejemplo pero que tenga los datos de los 2 empleados por cada trabajo (no solamente los datos del puesto1).

SELECT trabajos.*, empleados.*
FROM trabajos INNER JOIN empleados ON trabajos.puesto1=empleados.idEmpleado

Y acá va otra duda: En el caso que relacione los campos con integridad referencial el Access en la vista de relaciones me muestra una nueva tabla con el mismo nombre pero agregándole un guión bajo y un numero, como se utilizan estas nuevas tablas en las sentencias de consultas SQL.

Me habian dado una solucion que era tener otra tabla empleados con otro nombre y hacerle otro INNER JOIN a la consulta que puse de ejemplo, pero me parece que tener otra tabla igual que almacene los mismos datos no es la solución, ademas tomando en cuenta esto si tuviera en la tabla de trabajos mas columnas de puestos tendría que tener otra tabla trabajo por cada campo extra, por esto no me parece correcto esta solución.
Tres respuestas:
e=mc2
2009-04-13 06:54:57 UTC
Hola Ia.,

¿Que relación debe haber entre trabajo, puestos y empleados?

¿Un empleado pueste tener muchos trabajos? ¿Puede estar en más de un puesto? A la inversa, ¿en un puesto puede haber muchos empleados? O... incluso, para un mismo trabajo puede haber más de un empleado?

¿Cuantos puestos hay en un trabajo? ¿Sólo dos?



Me parece que tus tablas no están debidamente estructuradas. Me gustaría que brindaras detalles de la estructura y la relación. ¿Con que finalidad se emplean la tabla trabajo?



Si nos puedes comentar más podríamos ser de mayor ayuda. Así como lo estoy viendo, creo que hay un error en tu diseño.



EDITO:

Gracias por comunicarte conmigo, ya he visto los detalles.

Pues al modo en como redactas el problema se ve claramente una relación Muchos a Muchos (M:M) entre empleados y trabajos. La tabla intermedia que las vincula es puestos.

La cuestión es que el empleado va a ocupar un puesto para un trabajo, y ese mismo trabajo evidentemente ofrece otros puestos (al menos otro más, un segundo) a otro trabajador.

Ya sea uno, dos, cinco o la cantidad que se desee, se necesita de esa tabla intermedia para poder relacionar los diferentes empleados a los trabajos.

Entonces la tabla puesto debe contar con al menos dos campos: uno para una clave foránea hacia empleados y otro hacia para trabajos.



La cuestión a resolver pasará ahora en saber que función o cargo asumirá en el puesto (se supone que no todos asumen las mismas funciones, o cargo). En principio, se podría obviar una tabla "Función" o "Cargo", y disponer de un campo más en la tabla Puestos que almacene el nombre del cargo o función a cumplir. Pero si existe el caso de que los Cargos se repitan (por ejemplo: "Jefe" de trabajo1, "Jefe" de trabajo2), lo mejor es considerar una tabla Cargos relacionada de forma (1:M) con la tabla Cargos. Y en este caso el tercer campo se destinará a llevar una clave foránea hacia la tabla Cargos.



Yendo al tema de la consulta, deberías armar una similar pero a través de la intermedia, tal vez desees agrupar a los empleados por trabajo. Espero que se entienda.



Esta es mi humilde opinión.



Saludos,
2009-04-13 15:08:46 UTC
Hola!



Claro que hay solucion, primero diseña tus tablas apropiadamente por elemplo en ambas tablas debes tener una liga o relacion por ejemplo en "Empleados" pon idEmpleado que sera la llave primaria, en "Trabajos" pon idEmpleado y puesto como llaves primarias, luego arma tu consulta, por ejemplo:



SELECT trabajos.*, empleados.*

FROM trabajos INNER JOIN empleados ON trabajos.idEmpleado=empleados.idEmpleado



esto te mostrara todos los puestos de todos los empleados e incluso podrias traer los empleados de cierto puesto añadiendo la condicion:

where puesto = puestodeseado





Saludos cordiales
hstanleycrow
2009-04-13 14:23:25 UTC
pienso igual, tu estructura no esta bien, y por lo tanto con tablas mal diseñadas, tus queries igual seran malos... da mas detalles para ayudarte a estructurar.

Para mi por lo poco que entendi necesitarias las siguenets tablas:

Empleados(empleado_id,empleado_nombre)

Trabajos(trabajo_id,trabajo_nombre)

empleados_trabajos(empleado_id,trabajo_id)


Este contenido se publicó originalmente en Y! Answers, un sitio web de preguntas y respuestas que se cerró en 2021.
Loading...