 |
Club Builder Foro de C++Builder en español
|
| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
Angel Master


Registrado: 15 Abr 2003Mensajes: 2311Ubicación: Toledo (España)
|
Publicado: Vie 26 Jul, 2013 11:03 am Asunto: A vueltas con LEFT JOIN |
|
|
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 |
|
 |
Tor Master


Registrado: 22 Mar 2005Mensajes: 269Ubicación: obera, misiones, argentina
|
Publicado: Vie 26 Jul, 2013 1:13 pm Asunto: |
|
|
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 |
|
 |
Angel Master


Registrado: 15 Abr 2003Mensajes: 2311Ubicación: Toledo (España)
|
Publicado: Vie 26 Jul, 2013 5:47 pm Asunto: |
|
|
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.
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 |
|
 |
|
|
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
|
© 2002–2026 Club Builder · Funciona con phpBB.
|