Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Es correcto esta consulta con tres Tablas? (https://www.clubdelphi.com/foros/showthread.php?t=47849)

enecumene 09-09-2007 01:24:00

Es correcto esta consulta con tres Tablas?
 
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:

Código SQL [-]
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
Código SQL [-]
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

Re:
 
Intenta esto

Código SQL [-]
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:
Código:

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


La franja horaria es GMT +2. Ahora son las 14:02:02.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi