Unir 9 tablas con sql para consulta en asp

Arme un sistema de personal con 9 tablas las cuales tiene una columna en común, 'nonomina', cada tabla se llama: datos generales, incidencias, faltas, permisos, capacitaciones etc., utilizo el sql 2005 y dreamweaver cs3, entonces en dreamweaver hago la consulta con INER JOIN:
SELECT *
FROM dbo. Dat_gral
INNER JOIN dbo.incidencias ON dbo.dat_gral.nonomina=dbo.incidencias.nonomina
INNER JOIN dbo.faltas ON dbo.dat_gral.nonomina=dbo.faltas.nonomina
INNER JOIN dbo.incidencias ON dbo.dat_gral.nonomina=dbo.incidencias.nonomina
...etc...(hasta 9 )
WHERE nombre LIKE %MMColParam%
Lo que busco con esto es que en un campo de texto y un botón pongan cualquier apellido o nombre, y en la página de resultados aparezcan todos los datos de cada tabla, siendo que en la tabla de datos generales es la única que tiene el campo nombre, por tanto todas las demás tienen la columna 'nonomina', el problema radica en que al hacer este tipo de consulta no me arroja ningún resultado, cual seria el método o donde estoy mal, para poder avanzar,...

1 respuesta

Respuesta
1
Varias cosas a tener en cuenta. Una tu estas enlazando todas tus tablas con INNER JOIN lo cual quiere decir un dato que esta en dat_gral TIENE que estar en incidencias, faltas e indicadores. Por lo tanto si un empleado esta en general y no en faltas el registro no saldrá.
Ahora, lo que yo usaría seria Left Join en aquellas tablas donde exista relación pero no necesariamente se requera que el dato TENGA que estar en todas.
Por otra parte el like lo haría así: nombre Like '%MMColParam%' ¿notas las comillas? Y una cosa más, si el nombre es compuesto puede ser difícil hacer búsquedas exactas por lo que te aconcejaria algo como
nombre LIKE '%primernombre%segundonombre%apellido%'
Esto se puede hacer indicando a tus usuarios que '%' es un comodín que pueden usar en sus búsquedas.
Genial funciono!, ya me lo acepta con el left join, ahora, abusando de tu asesoría, fíjate que en cada nuevo resultado me duplica los datos de una tabla anterior, como puedo hacerle para unicamente me de los resultados, imaginemos un reporte con sus datos generales, las capacitaciones a las que asistió, etc... sin que los datos se dupliquen... no se si esto corresponde a SQL, ¿o a dreamweaver al mostrar la región...? de antemano gracias...
¿Mmm... seguro que los datos son duplicados? ¿No tienen ninguna diferencia? Si es así la solución puede ser agregar a tu consulta la palabra distinct así:
select distinct * from .....
Pero aclaro, solo funciona cuando los datos efectivamente son duplicados (no existe ninguna diferencia entre las filas)
Me cuentas
EStuve haciendo intentos, de inner join y nada.. no he podido, lo que pasa es que al haber un registro nuevo supongamos en capacitación... me pone otra vez los de datos generales y así en cada nuevo registro de las otras tablas se repite todo lo anterior MÁS el nuevo registro, trate de separar la petición de cada tabla haciendo 9 recordsets pasados por la variable de formularios, pero se me bloquea, también con el LEFT OUTER y nada, ¿qué pudiera estar fallando?... incluso baje un manual para aprender php y mysql, estoy desesperado...
Ok no comprendo muy bien lo que estas haciendo por eso voy a pedirte algo poco convencional... enviame una copia de la base de datos y de la sentencia que estas haciendo para analizarla.
[email protected]
Sbernaldi, invaluable tus respuestas las cuales me fueron empujando a investigar el problema que tenia, fíjate que lamentablemente la plataforma de windows ASP- SQL-IIS-DW, tiene problemas de permisos IWAM que les llaman ellos, por lo tanto esos permisos bloqueaban más allá de 4 consultas a la vez a diferentes tablas, por tanto como te comente hice pruebas con PHP-MySQL-APACHE-DW, instalando todo a la vez con APPSERV (programa con todas las aplicaciones necesarias para configurar tu servidor personal de manera automática bajo windows http://appservnetwork.com), me permitió conocer la diferencia de rendimiento entre una plataforma y otra, por lo que te puedo decir que mientras windows tardaba 16 seg. En darte una consulta en web de 4 tablas, la otra configuración realizaba la consulta con 12 tablas en máximo 2 segundos (promedio de 5000 registros por tabla), la solución para que me diera los resultados era crear un recorset por cada tabla y así funciono, por tanto si me autorizas me gustaría intercambiar experiencias por el correo que me enviaste, ya que con pocas palabras le haz dado al clavo... infinitas gracias... saludos... sergio esparza...

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas