Выполнение SQL-запроса - разные результаты в Windows и Linux - PullRequest
4 голосов
/ 12 октября 2010

Следующий запрос генерируется из 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, не работает!

Заранее спасибо!

Ответы [ 4 ]

2 голосов
/ 10 января 2011
0 голосов
/ 28 апреля 2011

Я заметил, что второй тестовый запрос работает только с таблицей ресурсов, а не с таблицей resourceOrganisation.

Я подозреваю, что таблица resourceOrganisation заполняется по-разному на двух компьютерах, и соответствующие строки могут не существовать в вашем Linux MySQL.

Что возвращает этот запрос?

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 
    )
0 голосов
/ 04 января 2011

Также не забудьте проверить параметры сортировки и чувствительности к регистру, если один сервер использует другой порядок сортировки для другого, то у вас возникнет та же проблема.

0 голосов
/ 16 декабря 2010

Убедитесь, что current_date () возвращает один и тот же формат в обеих платформах

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...