que estoy tratando de hacer un LEFT JOIN en Hibernate Query Language, en MySQL que puedo hacer esto de la siguiente manera:LEFT JOIN en Hibernate Query Language
seleccionar * de day_timetable_timeslots t LEFT JOIN golfnine_date_time_entity d EN d.start_time = t.start_time
En mis day_timetable_timeslots la tabla I tiene muchos intervalos de tiempo para todo el día con incrementos de 15 minutos. p.ej. 00:00:00, 00:15:00, 00:30:00, ... hasta el final del día. Así que me muestra todos los intervalos de tiempo con cualquier coincidencia golf_ine_date_time_entity, pero parece que no puedo averiguar cómo hacerlo en Hibernate Query Language.
Bueno, puedo hacer la UNIÓN IZQUIERDA mediante el siguiente HQL.
seleccione o.id, book.id de DayTimetableTimeslots o externa izquierda libro o.bookings donde o.id> 0
No sé por qué tengo que poner el o.id> 0 allí, pero funciona.
Sin embargo, solo quiero seleccionar book.id donde la reserva tiene una condición where. me trataron:
seleccione o.id, book.id de DayTimetableTimeslots o externa izquierda libro o.bookings donde o.id> 0 y book.dateTime.startDate> '2010-01-01'
Pero esto no funciona correctamente, solo muestra algunas de las tablas de tiempo de DayTimetable, pero no todas, como se supone que debe hacerlo.
Básicamente quiero hacer esta consulta mysql en HQL.
seleccione t.id como start_time_sequence, t.start_time como all_start_time, d. * Desde day_timetable_timeslots t LEFT JOIN golfnine_date_time_entity d = EN d.start_time t.start_time Y t.customer_id = d.customer_id Y d.start_date = '2010 -01-24' DONDE t.customer_id = 11
Gracias, Felipe
en MySQL que puede hacer lo siguiente y que me muestra todas las reservas en contra de su hora de inicio. Todas las horas de inicio se almacenan en day_timetable_timeslots.
seleccione t.start_time, d.id de day_timetable_timeslots t combinación izquierda golfnine_date_time_entity d = EN d.start_time t.start_time
'00:00:00', NULL
'00:15:00', NULL
'00:30:00', NULL
'00:45:00', NULL
'01:00:00', '443'
'01:15:00', NULL
'01:30:00', NULL
'01:45:00', NULL
'02:00:00', '444'
... para todo el día, que coincide con los ID de la golfnine_date_time_entity con los tiempos en day_timetable_timeslots.
Lo bueno de esta consulta de mysql es que puedo establecer algunos criterios sobre la reserva, por ej.
seleccione t.id, t.start_time, d.id de day_timetable_timeslots t UNEN LEFT golfnine_date_time_entity d EN d.start_time = t.start_time Y t.customer_id = d.customer_id Y d.start_date = '2010-01-24 ' Donde T.customer_id = 11
consigo
... lots of data then
'31', '07:15:00', NULL
'32', '07:30:00', NULL
'33', '07:45:00', NULL
'34', '08:00:00', '501'
'35', '08:15:00', NULL
'36', '08:30:00', NULL
'37', '08:45:00', NULL
'38', '09:00:00', NULL
'39', '09:15:00', NULL
... lots more data
Por lo que su única muestra la reserva en esa fecha especificada y el ID de cliente.
Es tan difícil de hacer esto en HQL ...
Ésta es la unión que quiero en HQL.
seleccione o.id, b.id de DayTimetableTimeslots O, LegacyDateTimeEntity b donde b.customer.id = 11 y b.startDate = '2010-02-07' y o.startTime = b.startTime
Da este SQL.
select
daytimetab0_.id as col_0_0_,
legacydate1_.id as col_1_0_
from
day_timetable_timeslots daytimetab0_,
golfnine_date_time_entity legacydate1_
where
legacydate1_.customer_id=11
and legacydate1_.start_date='2010-02-07'
and daytimetab0_.start_time=legacydate1_.start_time
Pero - sólo devuelve 1 fila porque sólo una golfnine_date_time_entity coincide, quiero que todos los day_timetable_timeslots filas devueltas.
Así que probé en HQL.
seleccione o.id, o.bookings.size de DayTimetableTimeslots o left join o.bookings reserve left join book.dateTime dt con dt.customer.id = 11 y dt.startDate = '2010-02-29' donde 1 = 1
Lo que lamentablemente parece ignorar la expresión con.
Devuelve este SQL.
select
daytimetab0_.id as col_0_0_,
(select
count(bookings3_.timeslot_id)
from
golfnine_booking bookings3_
where
daytimetab0_.id=bookings3_.timeslot_id) as col_1_0_
from
day_timetable_timeslots daytimetab0_
left outer join
golfnine_booking bookings1_
on daytimetab0_.id=bookings1_.timeslot_id
left outer join
golfnine_date_time_entity legacydate2_
on bookings1_.date_time_id=legacydate2_.id
and (
legacydate2_.customer_id=11
and legacydate2_.start_date='2010-02-29'
)
where
1=1
Lo cual se une a todas las relaciones de concordancia entre las tablas e ignora legacydate2_.customer_id = 11 y legacydate2_.start_date = '29/02/2010'
encontré que esto parece funcionar . Tenga en cuenta que estoy haciendo referencia a dt2 que está en la cláusula con.
seleccionar o.startTime distinta, dt2.id, book.uniqueDateTimeResource de DayTimetableTimeslots o unirse a izquierda libro o.bookings con book.deleted = 0 dejaron unirse a book.dateTime DT2 con dt2.startDate = '2010-01-19' y dt2.deleted = 0
¿Puede mostrar el SQL generado por su HQL, y algunos datos de muestra con la salida resultante y la salida deseada? – RMorrisey
gracias, agregué más comentarios a mi pregunta. – Phil