Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

A vueltas con LEFT JOIN

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Bases de Datos
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: A vueltas con LEFT JOIN Responder citando

Podéis llamarme pesado, pero no encuentro lo que pasa. Tengo este query:
Código:
SELECT A.Apellidos, A.Nombre, MAX(B.Fecha) Fecha, C.Literal
FROM 'Personas.db' A
LEFT JOIN 'Recibos.db' B ON A.CodPrv = B.CodPrv AND A.Referencia = B.Referencia
LEFT JOIN 'Instalacion.db' C ON C.Etiqueta = 'Recibo' AND B.Situacion = C.Valor
WHERE A.CodPrv = 45 AND A.Registro = 6765
GROUP BY A.Apellidos, A.Nombre, C.Literal

Se ejecuta sin problema pero me da dos filas en vez de una:
Código:
Apellidos       Nombre Fecha      Literal
XXXXXXXXXXXXXXX XXXXXX 28/02/2013 Devolución bancaria. Pendiente de pago
XXXXXXXXXXXXXXX XXXXXX 03/02/2012 Recibo abonado

y yo necesito que me saque sólo la primera de ellas porque es para un QR que debe sacar una sola hoja de datos personales. He probado en el LEFT JOIN 'Recibos.db' a incluir la condicion de que la fecha sea igual al MAX de ese campo:
Código:
LEFT JOIN 'Recibos.db' B ON A.CodPrv = B.CodPrv AND A.Referencia = B.Referencia AND B.Fecha IN (SELECT MAX(Fecha) FROM 'Recibos.db')

pero cuando no hay recibos no me saca nada.
_________________
Un saludo

Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA)
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

Hola Angel, la forma de encuentro LEFT JOIN es:

* trae todos los registros de Personas y solo los registros de recibos en los que los contenidos de los campos vinculados de ambas tablas sean iguales.

proba sin el where para ver si es el tipo de encuentro que estas necesitando, puede que sea otro tipo de encuentro que resuelva la situacion que se te plantea.

en la red hay mucha info de sql por ejemplo.

http://www.w3schools.com/sql/sql_join_left.asp

saludos jc
_________________
Un experto es aquel que ya ha cometido todos los errores posibles en una materia muy concreta.
(Niels Bohr)
Volver arriba
Ver perfil de usuario Enviar mensaje privado MSN Messenger
Mensaje    Asunto: Responder citando

Gracias por la respuesta Tor. Mientras esperaba si alguno me daba alguna pista he hecho algunas pruebas.
    1. He quitado el último campo (C.Literal) y entonces sí me saca solo una fila, la que me interesa.
    2. Si quito el WHERE pero dejo el resto del query me hace lo mismo pero con todos los registros de la tabla A.
    3. El enlace que me das, y otro parecido, ya lo había consultado pero no me ha resuelto ninguna duda. Sad

El query original es realmente más complejo (tiene diez tablas), pero he comprobado que la única que da problemas es donde está guardado ese C.Literal porque ejecutando todo el query sin ese campo, ¡sale bien!
_________________
Un saludo

Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA)
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.