Consulta sql

Buenas noches, poseo dos tablas con estas estructuras en MS ACCESS 2007
Empleados
Identificación (tipo: numero; llave primaria)
Nombres (tipo: texto)
Apellidos (tipo: texto)
Orden
Numeroorden (tipo: numero; llave primaria)
Descripción (tipo: texto)
Entregadoa (tipo: numero)
Autorizadopor (tipo: numero)
Los campos entregadoa y autorizadopor de la tabla ORDEN, están relacionados con el campo identificación de la tabla EMPLEADOS, el problema radica en que necesito realizar una consulta que contenga los siguientes datos: numeroorden, descripción, nombre de a quien se le entrego, apellido de a quien se le entrego, nombre de quien autorizo, apellido de quien autorizo.
Espero pronta colaboración, debido a que la solución me urge. Y muchas gracias.
Leandro
Respuesta
1
Bien cuando quieres hacer una consulta con datos relacionados en ambas tablas lo que debes hacer es incluirlas en ella y especificar para campo la tabla a la que pertenece y como tendrías 2 IDs de Empleados deberás obtener el dato y hacer una subconsulta, esto aplicado a tu caso entiendo que sería:
Empleados:
  1 | Juan | Gómez
  2 | María | Sánchez |
Orden:
  1 | ejemplo | 2 | 1 |
La sentencia sería algo como esto:
(SELECT `Orden`.`Numeroorden`,`Orden`.`Descripcion`,`Empleados`.`Nombre` as `EntregadoaNombre`,`Empleados`.`Apellidos` as `EntregadoaApellido`, 0 as `AutorizadoporNombre`, 0 as `AutorizadoporApellido`
FROM `Orden`,`Empleados`
WHERE `Orden`.`Entregadoa` = `Empleados`.`identificacion`
)
Union
(SELECT `Orden`.`Numeroorden`,`Orden`.`Descripcion`, 0 as `EntregadoaNombre`, 0 as `EntregadoaApellido`, `Empleados`.`Nombre` as `AutorizadoporNombre`,`Empleados`.`Apellidos`as `AutorizadoporApellido`
FROM `Orden`,`Empleados`
WHERE `Orden`.`Autorizadopor` = `Empleados`.`identificacion`
)
Espero que te sirva, sino dime e intento mirártelo mejor.
Man casi le atinas, solo que hizo una cartesiana y no es lo que deseo, este es el resultado, asume las comas (,) como tabulaciones
Consulta1
Numeroorden, Descripcion, EntregadoaNombre, EntregadoaApellido, AutorizadoporNombre, AutorizadoporApellido
1, carro, 0, 0, fabio enrique, cardona
1, carro, leandro, arenas rivera, 0, 0
2, bicicleta, 0, 0, leandro, arenas rivera
2, bicicleta, lizette, rodriguez villa, 0, 0
3, moto, 0, 0, tatiana, montoya arenas
3, moto, fabio enrique, cardona, 0, 0
En total son 3 registro y el primer registro debería quedar así:
1, carro, leandro, arenas rivera, fabio enrique, cardona
Los registros de las tablas con los siguientes
empleados
identificación nombres apellidos
15402403 fabio enrique cardona
15406727 leandro arenas rivera
1017169005   lizette                rodriguez villa
1022093818   tatiana              montoya arenas
Orden
numeroorden     descripcion     entregadoa     autorizadopor
1 carro 15406727 15402403
2 bicicleta 1017169005 15406727
3 moto 15402403 1022093818
Ah vale es que entonces entendí yo mal o me hic eun poco de lío co nel enunciado, es más fácil, cuando quieres hacer 2 comparaciones sobre la misma tabla para tener los empleados debes usarlos ALIAS en el campo FROM para poner 2 declaraciones de la tabla y que distinga diferentes columnas porque sino juntará la misma pero en el ejemplo lo vas a ver mejor que cualquier explicación teórica:
SELECT `Orden`.`Numeroorden`,`Orden`.`Descripcion`,`E1`.`Nombre` as `EntregadoaNombre`,`E1`.`Apellidos` as `EntregadoaApellido`, `E2`.`Nombre` as `AutorizadoporNombre`, `E2`.`Apellidos` as `AutorizadoporApellido`
FROM `Orden`,`Empleados` as `E1`, `Empleados` as `E2`
WHERE `Orden`.`Entregadoa` = `E1`.`identificacion`
AND `Orden`.`Autorizadopor` = `E2`.`identificacion`
Hacemos dos alias (E1 y E2) para la tabla Empleados y luego comparamos la id de entregado con el E1 y la id de autorizado con el E2.
Espero que esto sea lo que buscabas y haberte ayudado.

3 respuestas más de otros expertos

Respuesta
1
. Crea una consulta.
. Añade la tabla Orden.
. Añade la tabla Empleados. En la hoja de propiedades puedes asignarle un Alias a esa tabla. Pongamos EmpleadoEntrega.
. Relaciona el campo Entregadoa de Orden con el campo Identificación de la tabla EmpleadoEntrega.
. Añade otra vez la tabla Empleados. Cambiale el Alias a EmpleadoAutoriza.
. Relaciona Orden con EmpleadoAutoriza.
. Arrastra los campos que creas necesarios a la rejilla inferior.
Creo que ya tienes lo que buscas.
http://www-mvp-access.com/foro
PD: perdón por la demora...
Respuesta
De acuerdo a las tablas que pones, tu consulta podría quedar algo como esto:
SELECT o.NumeroOrden, o.Descripcion, e1.Nombres as NombreEntrega, e1.Apellidos as ApellidosEntrega, e2.Nombres as NombreAutoriza, e2.Apellidos as ApellidosAutoriza
FROM ORDEN o
INNER JOIN EMPLEADOS e1 ON o.Entregadoa = e1.Identificacion
INNER JOIN EMPLEADOS e2 ON o.Autorizadopor = e2.Identificacion
me sale el siguiente mensaje de error "error de sintaxis (falta operador) en la expresión de consulta 'o.entregadoa = e1.identificacion INNER JOIN EMPLEADOS e2 ON o.autorizadopor = e2.identificacion'.
¿Qué puede ser?
La consulta dice:
SELECT o.NumeroOrden, o.Descripcion, e1.Nombres as NombreEntrega, e1.Apellidos as ApellidosEntrega, e2.Nombres as NombreAutoriza, e2.Apellidos as ApellidosAutoriza
FROM ORDEN o
INNER JOIN EMPLEADOS e1 ON o.Entregadoa = e1.Identificacion
INNER JOIN EMPLEADOS e2 ON o.Autorizadopor = e2.Identificacion ;
Empleados
Identificación nombres apellidos
15402403 fabio enrique cardona
15406727 leandro arenas rivera
1017169005   lizette                rodriguez villa
1022093818   tatiana              montoya arenas
Orden
numeroorden     descripcion     entregadoa     autorizadopor
1 carro 15406727 15402403
2 bicicleta 1017169005 15406727
3 moto 15402403 1022093818
El primero renglón de la consulta debería ser
1 carro leandro arenas rivera fabio enrique cardona
Fíjate en los acentos. Ya que Identificación no es lo mismo que identificación (sin acento). Revisa como está en tus tablas y así deben de aparecer en tu consulta.
Respuesta
-1
No entiendo porque relaciona ambos campos, tanto EntregadoA como AutorizadoPor.
¿Siempre el EntregadoA es el mismo campo que AutorizadoPor?
¿El campo EntregadoA es el que saca de la tabla empleados o es el campo AutorizadoPor?
Contestame a esas cuestiones y te podre ayudar mejor.
Yo creo que debería de tener otra tabla, en mi modesta opinión debería de tener una tabla con los empleados (que por lo que entiendo es del que sacas el AutorizadoPor), otra tabla con los clientes (que es de donde se sacaría el EntregadoA) y la orden.
entregadoa y autorizadopor son personas distintas, cuyos registros están en la tabla empleados, por ello esta doblemente relacionada.
Los registros de las tablas con los siguientes
empleados
identificación nombres apellidos
15402403 fabio enrique cardona
15406727 leandro arenas rivera
1017169005   lizette                rodriguez villa
1022093818   tatiana              montoya arenas
Orden
numeroorden     descripcion     entregadoa     autorizadopor
1 carro 15406727 15402403
2 bicicleta 1017169005 15406727
3 moto 15402403 1022093818
Pero en este caso tu lo que tienes es que un vendedor, también es un comprador. Si no los tienes separados en tablas diferentes o por ejemplo, tener un campo que los diferencie, no creo que se pueda hacer lo que tu quieres, porque date cuenta que por ejemplo Fabio enrique lo tienes tanto en el campo de entregadoA como en el de AutorizadoPor.
Y en ese caso access se pierde y en la consulta no te devuelve nada.
Yo lo que haría seria separarlos en dos tablas, aunque se duplicaran los registros, en varias tablas.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas