Неужели есть разница SQL в ФБ 1.5.2 на под Линукс и Виндой?
Добавлено: 22 июн 2005, 17:53
Базы почти одинаковые по данным (копии рабочей базы с интервалом в неделю-другую). Абсолютно одинаковые по структуре. На обоих стоит ФБ 1.5.2 (билд, правда, не уверен, что одинаковый)
Запрос работает на сервере под виндами, не работает под линуксом. И еще работает на рабочем ФБ 1.0 по ФриБСД
Вот запрос, в этом варианте он работает везде. В оригинальном варианте отсутствует выделенное поле в select и в group by, тогда он не работает под Линуксом, на условие по этому полю в having ругается. Оригинальный вариант много лет работает на рабочем сервере, интересно только как она вообще с having разбирается, если этого поля не было.
Кстати, и ругается он как-то странно, у меня говорит password required, из прикладной программы - invalid expression in the HAVING clause (neither an agregate function nor a part of the GROUP BY cllause), что, собственно и было. Вот только извечный вопрос - Как Оно Раньше Работало?
select ot.full_name, rl.identrab, sum(distinct rl.vrem), u.pol
from STAFL_GETDOWN_ID_LVL (2637,-1) ST
join st_afl ot on ot.id_podraz=st.id_get
join pers_main_hist pmh on pmh.podraz_id=ot.id_podraz
join pers_main_tmp pmt on pmt.id_pers=pmh.id_pers
join zrlr rl on rl.kodpodr starting '128' and rl.otchper=:OtchPer
and rl.identrab=pmt.identrab
/* здесь условие почикано ввиду неприлично большого размера, к
вопросу, имхо, отношения не имеет */
join zukr u on u.identrab=rl.identrab
group by ot.full_name, rl.identrab, u.pol
having
(u.pol='M' and formatfloat(sum(distinct r102.vrem),2) >= (select hours_qtty/60 from calendar where year_=:Year_ and month_=:Month_ ))
or
(u.pol='W' and formatfloat(sum( distinct r102.vrem),2) >= (select hours_qtty36/60 from calendar where year_=:Year_ and month_=:Month_ ))
Запрос работает на сервере под виндами, не работает под линуксом. И еще работает на рабочем ФБ 1.0 по ФриБСД
Вот запрос, в этом варианте он работает везде. В оригинальном варианте отсутствует выделенное поле в select и в group by, тогда он не работает под Линуксом, на условие по этому полю в having ругается. Оригинальный вариант много лет работает на рабочем сервере, интересно только как она вообще с having разбирается, если этого поля не было.
Кстати, и ругается он как-то странно, у меня говорит password required, из прикладной программы - invalid expression in the HAVING clause (neither an agregate function nor a part of the GROUP BY cllause), что, собственно и было. Вот только извечный вопрос - Как Оно Раньше Работало?
select ot.full_name, rl.identrab, sum(distinct rl.vrem), u.pol
from STAFL_GETDOWN_ID_LVL (2637,-1) ST
join st_afl ot on ot.id_podraz=st.id_get
join pers_main_hist pmh on pmh.podraz_id=ot.id_podraz
join pers_main_tmp pmt on pmt.id_pers=pmh.id_pers
join zrlr rl on rl.kodpodr starting '128' and rl.otchper=:OtchPer
and rl.identrab=pmt.identrab
/* здесь условие почикано ввиду неприлично большого размера, к
вопросу, имхо, отношения не имеет */
join zukr u on u.identrab=rl.identrab
group by ot.full_name, rl.identrab, u.pol
having
(u.pol='M' and formatfloat(sum(distinct r102.vrem),2) >= (select hours_qtty/60 from calendar where year_=:Year_ and month_=:Month_ ))
or
(u.pol='W' and formatfloat(sum( distinct r102.vrem),2) >= (select hours_qtty36/60 from calendar where year_=:Year_ and month_=:Month_ ))