Следующий запрос генерируется из Hibernate (за исключением того, что я заменил список полей на *):
select *
from
resource resource0_,
resourceOrganization resourceor1_
where
resource0_.active=1
and resource0_.published=1
and (
resource0_.resourcePublic=1
or resourceor1_.resource_id=resource0_.id
and resourceor1_.organization_id=2
and (
resourceor1_.resource_id=resource0_.id
and resourceor1_.forever=1
or resourceor1_.resource_id=resource0_.id
and (
current_date between resourceor1_.startDate and resourceor1_.endDate
)
)
)
В настоящее время у меня более 200 записей в базах данных Windows и Linux и в настоящее время для каждой записи,следующее верно: active = 1 опубликовано = 1 resourcePublic = 1
Когда я запускаю это непосредственно в клиенте SQL, этот запрос SQL возвращает мне все соответствующие записи в Windows, но ни одной в Linux.Я использую MySQL 5.1 как для Windows, так и для Linux.
Если я применю логическую логику (true и true и (true или что-то еще)), я ожидаю, что результат будет истинным.Это действительно верно для Windows, но неверно для Linux !!!
Если я изменю запрос следующим образом, он будет работать как в Windows, так и в Linux:
select *
from
resource resource0_
where
resource0_.active=1
and resource0_.published=1
and (
resource0_.resourcePublic=1
)
Итак, просто наличиеусловий, связанных с resourceOrganization, заставляет запрос давать 0 результатов в Linux, и я ожидал, что, поскольку это вторая часть условия 'или', первая часть которого истинна, результат должен быть истинным.
Любая идеяпочему эта разница в поведении между двумя ОС и почему то, что должно работать в Linux, не работает!
Заранее спасибо!