Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 28-01-2005
Noela Noela is offline
Registrado
 
Registrado: ene 2005
Posts: 6
Poder: 0
Noela Va por buen camino
Question Consulta SQL tres tablas. Paradox

Hola a todos

Estoy intentado hacer una consulta de tres tablas en Paradox 7.

Las trablas son: Medias, Personas y Sectores.

Quiero mostrar todos los registros de la Tabla Medias y solo los registros de las Tablas Personas y Sectores donde los campos sean iguales.

La tabla Medias tiene como clave primaria CdMedias y como claves foráneas CdPersona y CdSector, los valores de las claves foráneas pueden ser nulos.

En la tabla de Personas tengo como clave primaria CdPersona, y tengo otros campos entre ellos el campo NombrePersona que es el que quiero mostrar en la consulta.

En la tabla Sectores tengo como clave primaria CdSector, y tengo entre otros el campo NombreSector que es el que quiero mostrar en la consulta.

En realidad la consulta que yo quiero es la siguiente:

SELECT Medias.CdMedias, Persona.NombrePersona, Sector.NombreSector

FROM Sector RIGHT JOIN
(Persona RIGHT JOIN Medias ON
Persona.CdPersona = Medias.CdPersona)
ON Sector.CdSector = Medias.CdSector
ORDER BY CdMedias

La consulta anterior esta hecha en Access y yo la necesito para Paradox, el problema que tengo es que Paradox no me reconoce esta sintaxis.
Si intento hacer el Right Join anidado me da error.
Alguien sabría decirme cual es la sintaxis adecuada para esta consulta en Paradox?

Gracias por vuestro tiempo.

Responder Con Cita
  #2  
Antiguo 31-01-2005
lucianojdg lucianojdg is offline
Miembro
 
Registrado: dic 2003
Posts: 42
Poder: 0
lucianojdg Va por buen camino
Smile Consulta SQL con LEFT JOIN

SELECT M.CdMedias, P.NombrePersona, S.NombreSector
FROM Medias M
LEFT JOIN Personas P ON P.CdPersona = M.CdPersona
LEFT JOIN Sector S ON S.CdSector = M.CdSector
ORDER BY M.CdMedias

Esta consulta te va a traer todos los registros de medias y los nombres de personas y sectores que tienen asociados, en caso de que la tabla medias tenga algun codigo de persona o sector nulo e campo P.NombrePersona o S.NombreSector va a ser nulo tambien

Si quisieras agragar restricciones relacionadas con las tablas secundarias (en donde haces los Left Joins) seria de la siguiente manera:

...
LEFT JOIN Personas P ON P.CdPersona = M.CdPersona
and P.Edad > 20
...

Si quisieras agregar restricciones relacionadas a la tabla Medias seria de la sigueite manera:

SELECT M.CdMedias, P.NombrePersona, S.NombreSector
FROM Medias M
LEFT JOIN Personas P ON P.CdPersona = M.CdPersona
LEFT JOIN Sector S ON S.CdSector = M.CdSector
Where M.CdUnidadMedida = 2
and ...
ORDER BY M.CdMedias


En caso de que necesites hacer un Join en donde no se permitan los nulos tenes que usar INNER JOIN en vez de LEFT JOIN.


Espero que te sirva

Saludos


Luciano
Responder Con Cita
  #3  
Antiguo 01-02-2005
Noela Noela is offline
Registrado
 
Registrado: ene 2005
Posts: 6
Poder: 0
Noela Va por buen camino
Thumbs up ha resultado!

Hola Luciano!

Si que me ha servido!!

No sabes bién cuanto te lo agradezco.

Muchas gracias por tu tiempo.

Besos.
Responder Con Cita
  #4  
Antiguo 26-07-2007
Saiyan Saiyan is offline
Miembro
 
Registrado: abr 2007
Posts: 47
Poder: 0
Saiyan Va por buen camino
Exclamation

Yo tengo el mismo problema y no puedo... ni en access con el SQL ni en el adoquery de delphi :(

Tengo 3 tablas
*PlanillaControlDistr
*TipoPlanilla
*Repartidor

en la tabla "PlanillaControlDistr" tengo el codigo de tipo de planilla y el codigo de repartidor.

y quiero vincular las 3 con JOIN

lo pruebo así y no funciona:
Código SQL [-]
SELECT A.*,B.Nombre,C.Descr
FROM PlanillaControlDistr A 
LEFT JOIN Repartidores B ON A.Cod_Rep = B.CodRep
LEFT JOIN Tipoplanilla C ON A.CodTipoplanilla = C.Tipoplanilla

vinculando 2 si pude, pero no puedo vincular la tercera...

Esto es cuando vinculo 2, que si funciona:

Código SQL [-]
SELECT A.*, B.Nombre 
FROM PlanillaControlDistr A 
LEFT JOIN Repartidores B ON A.Cod_Rep = B.CodRep


que errores tengo vinculando las 3 tablas?

Gracias desde ya
Responder Con Cita
  #5  
Antiguo 26-07-2007
Avatar de Ivanzinho
[Ivanzinho] Ivanzinho is offline
Miembro Premium
 
Registrado: ene 2005
Ubicación: Galicia
Posts: 595
Poder: 20
Ivanzinho Va por buen camino
¿Por qué no funciona, no devuelve los resultados deseados o te da algún error?
__________________
Si no lees esto no vivirás tranquilo
Non lle poñades chatas â obra namentras non se remata. O que pense que vai mal que traballe n’ela; hai sitio para todos. (Castelao)
Responder Con Cita
  #6  
Antiguo 26-07-2007
Saiyan Saiyan is offline
Miembro
 
Registrado: abr 2007
Posts: 47
Poder: 0
Saiyan Va por buen camino
con esto

Código SQL [-]
SELECT A.*,B.Nombre,C.Descr
FROM PlanillaControlDistr A 
LEFT JOIN Repartidores B ON A.Cod_Rep = B.CodRep
LEFT JOIN Tipoplanilla C ON A.CodTipoplanilla = C.Tipoplanilla

dice:
Error de sintaxis (falta operador) en la expresión de consulta 'A.Cod_Rep = B.CodRep LEFT JOIN Tipoplanilla C ON A.CodTipoplanilla = C.Tipoplanill'
Responder Con Cita
  #7  
Antiguo 26-07-2007
Avatar de Ivanzinho
[Ivanzinho] Ivanzinho is offline
Miembro Premium
 
Registrado: ene 2005
Ubicación: Galicia
Posts: 595
Poder: 20
Ivanzinho Va por buen camino
prueba a poner
Código SQL [-]
SELECT A.*,B.Nombre,C.Descr
FROM (PlanillaControlDistr A
LEFT JOIN Repartidores B ON A.Cod_Rep = B.CodRep)
LEFT JOIN Tipoplanilla C ON A.CodTipoplanilla = C.Tipoplanilla

Un saúdo
__________________
Si no lees esto no vivirás tranquilo
Non lle poñades chatas â obra namentras non se remata. O que pense que vai mal que traballe n’ela; hai sitio para todos. (Castelao)
Responder Con Cita
  #8  
Antiguo 26-07-2007
Saiyan Saiyan is offline
Miembro
 
Registrado: abr 2007
Posts: 47
Poder: 0
Saiyan Va por buen camino
tampoco..
me aparecen "showmessages" pidiendo datos en access
Responder Con Cita
  #9  
Antiguo 03-08-2007
lucianojdg lucianojdg is offline
Miembro
 
Registrado: dic 2003
Posts: 42
Poder: 0
lucianojdg Va por buen camino
proba escribir la sentencia de esta forma:

SELECT A.*, B.Nombre, C.Descr
FROM PlanillaControlDistr A
LEFT JOIN Repartidores B ON (B.CodRep = A.Cod_Rep)
LEFT JOIN Tipoplanilla C ON (C.Tipoplanilla = A.CodTipoplanilla)



Saludos!
__________________
Luciano DG
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 20:33:32.


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
Copyright 1996-2007 Club Delphi