Ir al contenido



Foto

Consulta con tres tablas


  • Por favor identifícate para responder
13 respuestas en este tema

#1 Fleon

Fleon

    Advanced Member

  • Miembros
  • PipPipPip
  • 172 mensajes
  • LocationRepública Dominicana

Escrito 25 marzo 2009 - 05:47

Hola amigos, quiero saber cómo esta consulta entre tres tablas, tengo las siguientes tablas:

Empleados

EmpID (Number)
Apellidos (Text)
Nombres (Text)
DptoID (Number)
Cargo (Number)

Departamento

DptoID (Number)
Descricpcion (Number)

Plantillas

EmpID (Number)
Plantilla (Memo)

Una breve explicación de las tablas, como es obvio las tablas empleados y departamentos no se necesita de explicación, la tabla plantilla es clave de esta consulta, pues son las huellas dactilares capturada de los empleados, como no están todos los empleados, necesito sacar una consulta de los empleados que faltan por capturar las huellas, por ejemplo, la tabla de empleados hay 3,500 registros, o sea, 3,500 empleados y en la tabla plantilla hay 2,800 empleados que se le capturó su huella, necesito sacar un reporte de los 700 empleados que faltan por capturar. Espero que me hayan entendido :$.

Fleon xD
  • 0

#2 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 13.953 mensajes
  • LocationMéxico

Escrito 25 marzo 2009 - 05:59

Hola

Tal vez esto te sirva amigo.



sql
  1. SELECT a.EmpId, a.Nombres, a.Apellidos, a.DeptoID, b.Plantilla FROM Empleados a
  2. LEFT JOIN Plantillas b
  3. ON a.EmpID = b.EmpID
  4. WHERE b.Plantilla IS NULL



Salud OS
  • 0

#3 Fleon

Fleon

    Advanced Member

  • Miembros
  • PipPipPip
  • 172 mensajes
  • LocationRepública Dominicana

Escrito 25 marzo 2009 - 06:35

¡Gracias Egostar, Me funciona de pelos! :D

Fleon xD
  • 0

#4 Fleon

Fleon

    Advanced Member

  • Miembros
  • PipPipPip
  • 172 mensajes
  • LocationRepública Dominicana

Escrito 25 marzo 2009 - 06:51

Pensé que era lo que necesitaba, pero le falta un pequeño ajuste y es que falta la tabla Departamento, debe sacar los empleados que estén en esa tabla de departamentos, ya que sólo con el campo departamento de la tabla empleados me saca un listado de empleados de departamentos inexistentes, ¿alguien me puede ayudar con eso?.

Fleon xD
  • 0

#5 Fleon

Fleon

    Advanced Member

  • Miembros
  • PipPipPip
  • 172 mensajes
  • LocationRepública Dominicana

Escrito 25 marzo 2009 - 07:09

Bueno haciendo unas pruebas hice lo siguiente para agregar la tabla departamento:



sql
  1. SELECT a.empleados, a.nombres, a.apellido, a.departamento, b.Template, c.ID FROM (empleados a
  2. LEFT JOIN fptable b
  3. ON a.empleados = b.EnrollNumber) LEFT JOIN departamento c ON a.departamento = c.ID
  4. WHERE b.Template IS NULL GROUP BY c.ID, a.departamento, a.empleados, a.nombres, a.apellido, e,departamento, b.template



Pero obtuve el siguiente error:

---------------------------
Error
---------------------------
The specified field 'departamento' could refer to more than one table listed in the FROM clause of your SQL statement.
---------------------------
OK  Help 
---------------------------


¿A qué se deberá esto?.

Fleon xD

  • 0

#6 Rolphy Reyes

Rolphy Reyes

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.091 mensajes
  • LocationRepública Dominicana

Escrito 25 marzo 2009 - 07:47

Saludos.

Asumiendo que todos tus empleados están en la tabla Departamento quedarí­a así­:



sql
  1. SELECT A.EmpID, A.Apellidos, A.Nombres, A.Cargo , B.Descricpcion Departamento
  2. FROM EMPLEADOS A
  3. JOIN DEPARTAMENTOS B ON A.DptoID  = B.DptoID
  4. WHERE A.EmpID NOT IN (SELECT C.EmpID FROM PLANTILLAS C)



Espero te sirva, sino pasa de nuevo!!  :D :D
  • 0

#7 Rolphy Reyes

Rolphy Reyes

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.091 mensajes
  • LocationRepública Dominicana

Escrito 25 marzo 2009 - 08:09

Saludos.

Otra solución podrí­a ser la siguiente, siempre y cuando la siguiente función este disponible en Access.



sql
  1. SELECT A.EmpID, A.Apellidos, A.Nombres, A.Cargo , B.Descricpcion Departamento
  2. FROM EMPLEADOS A
  3. JOIN DEPARTAMENTOS B ON A.DptoID  = B.DptoID
  4. WHERE NOT EXISTS (SELECT C.EmpID FROM PLANTILLAS C WHERE A.EmpId = C.EmpId)


  • 0

#8 Fleon

Fleon

    Advanced Member

  • Miembros
  • PipPipPip
  • 172 mensajes
  • LocationRepública Dominicana

Escrito 26 marzo 2009 - 05:03

Gracias Rolphy, no funcionó, de todos modos decidí­ hacerlo en dos querys y hasta ahora está resultando, pero aún siguen abiertas las opciones ;).

Fleon xD
  • 0

#9 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 13.953 mensajes
  • LocationMéxico

Escrito 26 marzo 2009 - 05:15

Gracias Rolphy, no funcionó, de todos modos decidí­ hacerlo en dos querys y hasta ahora está resultando, pero aún siguen abiertas las opciones ;).

Fleon xD


Intenta con esto amigo Flemon.



sql
  1. SELECT departamentos.DeptoID, empleados.nombres, empleados.apellido, Plantillas.Template
  2. FROM (departamentos INNER JOIN empleados ON departamentos.DeptoID = empleados.DptoID)
  3. LEFT JOIN Plantillas ON empleados.EmpID = Plantillas.EmpID
  4. WHERE Plantillas.Template IS NULL
  5. ORDER BY departamentos.DeptoID



Salud OS
  • 0

#10 Fenareth

Fenareth

    Advanced Member

  • Administrador
  • 3.486 mensajes
  • LocationMexico City

Escrito 26 marzo 2009 - 05:29

....

Intenta con esto amigo Flemon.

....
Salud OS


Y ese quién es ???????  ^o|  *-)  8-)

Ya pues, si no ayuda, no estorbe...  :$  :p
  • 0

#11 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 13.953 mensajes
  • LocationMéxico

Escrito 26 marzo 2009 - 05:32


Y ese quién es ???????  ^o|  *-)  8-)

Ya pues, si no ayuda, no estorbe...  :$  :p


Upps, se me fue una m de mamon :D :D :D

Sorry :p

Salud OS
  • 0

#12 Fleon

Fleon

    Advanced Member

  • Miembros
  • PipPipPip
  • 172 mensajes
  • LocationRepública Dominicana

Escrito 03 septiembre 2009 - 12:31

Upps, se me fue una m de mamon :D :D :D

Sorry :p

Salud OS


:o :o, amigos, lamento la tardanza, Egostar probé tu consulta y obtengo un error:

---------------------------
Error
---------------------------
No coincide el tipo en la expresión.
---------------------------
OK  Help 
---------------------------


La consulta la tengo así­:



sql
  1. SELECT Departamentos.DeptoID, Departamentos.DESCRIPCION, Empleados.Nombre, Empleados.Apellido, Huellas.Huella
  2. FROM (Departamentos INNER JOIN Empleados ON Departamentos.DeptoID = Empleados.DptoID)
  3. LEFT JOIN Huellas ON Empleados.Codigo = Huellas.Codigo
  4. WHERE Huellas.Huella IS NULL
  5. ORDER BY Departamentos.DeptoID



¿Qué sucede? :(

Fleon xD

  • 0

#13 eduarcol

eduarcol

    Advanced Member

  • Administrador
  • 4.482 mensajes
  • LocationVenezuela

Escrito 03 septiembre 2009 - 12:42

Esto esta bien asi??



sql
  1. ON Empleados.Codigo = Huellas.Codigo



o es un error de tipeo???, deberia ser asi:



sql
  1. ON Empleados.EmpId = Huellas.EmpId


  • 0

#14 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.404 mensajes
  • LocationRepública Dominicana

Escrito 03 septiembre 2009 - 12:45

Ese Error se debe a que hay dos campos que son de distintos tipos o sea, es posible que estés relacionando una string con Integer, algo por estilo, debes revisar tu diseño en la base, aquí­ hay una lectura al respecto.

Saludos.
  • 0