PDA

Ver la Versión Completa : Es correcto esta consulta con tres Tablas?


enecumene
09-09-2007, 01:24:00
Hola Compañeros del foro, estoy tratando de hacer una consulta con tres tablas en un reporte con un QuickReport, esta es la consulta que tengo:

select Asistencia.nombre, Asistencia.tanda, Asistencia.cargo, Asistencia.fecha, Asistencia.tardanza, Asistencia.entrada, Salida.salida, Ajuste.licencia, Ajuste.excusa, Ajuste.permiso, Ajuste.enfermedad, Ajuste.vacacion, Ajuste.servicio Ajuste.nombre, Ajuste.cargo, Ajuste.fecha, Ajuste.tanda, Salida.tanda, Salida.fecha, Salida.cargo, Ajuste.permiso, Ajuste.enfermedad, Ajuste.vacacion, Ajuste.servicio from (Asistencia inner join Salida on Asistencia.nombre = Salida.nombre) inner join Ajuste on Ajuste.nombre = Asistencia.nombre

pues al parecer no me funciona, cuando agrego los campos al dar doble click al query me sale esos campos:

EXP1009
EXP1010
EXP1011
EXP1012

estare haciendo mal la consulta? estoy usando ADO+Access+Delphi7.

Saludos,

Caral
09-09-2007, 03:53:19
Hola

select Asistencia.nombre, Asistencia.tanda, Asistencia.cargo, Asistencia.fecha,
Asistencia.tardanza, Asistencia.entrada, Salida.nombre, Salida.salida, Ajuste.licencia,
Ajuste.excusa, Ajuste.permiso, Ajuste.enfermedad, Ajuste.vacacion,
Ajuste.servicio Ajuste.nombre, Ajuste.cargo, Ajuste.fecha, Ajuste.tanda,
Salida.tanda, Salida.fecha, Salida.cargo, Ajuste.permiso, Ajuste.enfermedad,
Ajuste.vacacion, Ajuste.servicio
from (Asistencia inner join Salida on Asistencia.nombre = Salida.nombre)
inner join Ajuste on Ajuste.nombre = Asistencia.nombre

Salida.salida, no se si causa problemas, yo usaria Salida.salida1
Revisa el color Rojo y tu codigo, veras la diferencia.
Saludos

pcicom
09-09-2007, 06:21:01
Intenta esto


SELECT a.nombre, a.tanda, a.cargo, a.fecha, a.tardanza, a.entrada,
Salida.salida, Ajuste.licencia, Ajuste.excusa,
Ajuste.permiso, Ajuste.enfermedad, Ajuste.vacacion,
Ajuste.servicio Ajuste.nombre, Ajuste.cargo, Ajuste.fecha,
Ajuste.tanda, Salida.tanda, Salida.fecha,
Salida.cargo, Ajuste.permiso, Ajuste.enfermedad, Ajuste.vacacion,
Ajuste.servicio
FROM Asistencia a
INNER JOIN Salida on a.nombre = Salida.nombre
INNER JOIN Ajuste on Ajuste.nombre = a.nombre



Puedes probar remplazando INNER por LEFT o RIGHT segun sea el caso

INNER te devuelve registros uno a muchos
LEFT te devuelve uno a uno
RIGHT te devuelve muchos a uno.

rafita
11-09-2007, 10:28:54
Hola,

Me parece que el problema lo tienes con Access: sólo admite un INNER JOIN.

Para comprobarlo elimina los campos de una tabla y el INNER JOIN correspondiente.
Si te funciona, haz lo propio con la otra tabla.
Si ambos te funcionan por separado, la cosa está clara: sólo admite uno.

Te recomiendo que con Access utilices esta sintaxis:
SELECT Campos FROM Tabla1, Tabla2, Tabla3 WHERE Condicion1 and Condicion2 and Condicion3

donde Condicion1, Condicion2 y condicion3 serían las mismas que poner en los INNER JOIN.

Te pongo un ejemplo similar al tuyo:
SELECT F.Id as FId, F.Factura, F.Importe as Importe_Factura, F.Descripcion as Descripcion_Factura, Anulada,
Nombre as Nombre_Tercero, CIF as CIF_Tercero,
P.Anno as Anno_Proyecto, P.Descripcion as Descripcion_Proyecto
FROM Facturas F, Terceros T, Proyectos P
WHERE (F.Id>0) and (F.Tercero = T.Id) and (F.Proyecto = P.Id);

// ---> INNER JOIN Terceros T ON F.Tercero = T.Id
// ---> INNER JOIN Proyectos P ON F.Proyecto = P.Id


Saludos