Cita:
Iniciado por gnzsoloyo Si, el problema está dado tanto por el orden de las tablas invocadas como por el hecho de usar INNER JOIN.
Por un lado, INNER JOIN exige que haya sí o sí coincidencias entre toas las tablas. No te mostrará los resultados de otra forma. Para tu caso debes usar LEFT o RIGHT JOIN. Pero en estos casos la posición de las tablas afecta el resutlado y deben ordenarse desde la que tiene todos los registros a las que sólo tiene una parte.
Esto significa que si no todas las agencias tienen tickets, entonces vac_reservaciones y vac_detalles_reservacion no deben ser las primeras tablas.
Si no hay agencias sin operadores ni operadores sin agencias, se puede usar INNER JOIN en ese caso; si no hay reservas sin detalle, elINNER JOIN también va entre estas dos tablas,
pero no entre los pares.
Algo así:
Código MySQL:
Ver original COUNT(r.idReservacion
) numeroVendido
, oa.nombreAgenciaO NombreAgencia
vac_operadores o
INNER JOIN vac_operadores_agencia oa
ON o.idOperador
= oa.idOperador
LEFT JOIN vac_reservaciones
AS r
ON o.idReservacion
= r.idReservacion
INNER JOIN vac_detalles_reservacion dr
ON r.idReservacion
= dr.idReservacion
dr.fechaSalida
BETWEEN '2010-08-01' AND '2010-08-31'
Al aplicar esta sentencia me da el mismo resultado:
Código:
SELECT COUNT( r.idReservacion ) numeroVendido, oa.nombreAgenciaO NombreAgencia
FROM vac_operadores_agencia oa, vac_operadores AS o, vac_reservaciones AS r, vac_detalles_reservacion dr
WHERE dr.fechaIngreso
BETWEEN '2010-08-01'
AND '2010-08-31'
AND dr.fechaSalida
BETWEEN '2010-08-01'
AND '2010-08-31'
AND r.idReservacion = dr.idReservacion
AND r.idReservacion = o.idReservacion
AND o.idOperador = oa.idOperador
GROUP BY oa.nombreAgenciaO
ORDER BY numeroVendido DESC
Esto es sin el uso de JOINS,
que podria agregarle o modificarle para que me de el resultado que quiero?