Имя: Пароль:
IT
Админ
OpenOffice 3.2 base, косяк с запросами
,
0 Sakura
 
23.06.12
14:19
Пишу курсовик по БД, для облегчения жизни решила воспользоваться OpenOffice Base, как аналогом Аксесса, который рекомендован преподом.
И внезапно полшучилась проблема с запросами - те, которые делаю через мастер, отрабатывают как надо, но мастер не умеет делать сложные - вложенные и соединениями. Их написала на чистом SQL, все корректно, проверили тест запроса несколько раз, но при попытке выполнить выдается ошибка, в одном запросе - не может найти столбец таблицы, хотя он есть, в другом - ошибка при группировке.
В чем может быть проблема?

Переписать на мускуле - вариант, но самый последний. Хочется добить именно на ОО.
1 Sakura
 
23.06.12
14:38
Пример: текст запроса на вычисление прибыли от завершенных проектов:

SELECT "Pr_code", "Pr_name", "finished", "finish", SUM( "Summ" ) FROM "Project" WHERE ( "finished" = True ) GROUP BY "Pr_code"

Кавычки так и должны быть, это требование синтаксиса Опенофиса
2 Jaap Vduul
 
23.06.12
14:43
(1) С точки зрения sql запрос косячный.
3 Ненавижу 1С
 
гуру
23.06.12
14:45
SELECT "Pr_code", "Pr_name", "finished", "finish", SUM( "Summ" ) FROM "Project" WHERE ( "finished" = True ) GROUP BY "Pr_code", "Pr_name", "finished", "finish"
4 Sakura
 
23.06.12
14:48
(3) спасибо, сработало. но не суммирует прибыль от стоимости проектов
5 Шурик71
 
23.06.12
14:52
и не должно суммировать
6 Sakura
 
23.06.12
14:56
(5) Хм. А как тогда сделать, чтоб суммировало?
7 Шурик71
 
23.06.12
14:56
в запросе написано "вычислить сумму по каждому законченному проекту"
8 Шурик71
 
23.06.12
14:57
(6) что нужно получить то? добавить итоговую строку? или что? и какая субд?
9 Sakura
 
23.06.12
14:58
СУБД - встроенная опенофисовская
да, итоговая нужна, с общей прибылью от всех проектов
10 Шурик71
 
23.06.12
15:01
под рукой нет

проверь COMPUTE()
11 Sakura
 
23.06.12
15:03
не-а, не знает такой команды
12 Шурик71
 
23.06.12
15:03
или к group by добавить With Rollup
13 Sakura
 
23.06.12
15:04
(12) тоже не умеет, сцука
14 Шурик71
 
23.06.12
15:05
просто груп бай выполняет свертку по указанным полям
15 Шурик71
 
23.06.12
15:06
если начего не умеет, тогда итоговый sum() и union к твоему запросу
16 Sakura
 
23.06.12
15:08
(15) т.е. после текста из (3) вставить union Sum ( "summ" ) так?
17 Шурик71
 
23.06.12
15:10
[твой текст]

union


SELECT null, null, null, null, SUM( "Summ" ) FROM "Project" WHERE ( "finished" = True )
18 Sakura
 
23.06.12
15:14
(17) the given command is not a SELECT statement.
only queries are allowed
19 Sakura
 
23.06.12
15:17
похоже, union, как и left join, эта зараза делать не умеет.
печально.
20 Sakura
 
23.06.12
15:48
а можно как-то без union это дело переписать?
21 izekia
 
23.06.12
15:55
дока никак не читается?
http://hsqldb.org/doc/2.0/guide/sql-ind.html
22 Sakura
 
23.06.12
15:56
(21) увы, английский у меня нулевой
пару лет назад делала простенькую БД в опенофисе, не было таких проблем О_о
23 izekia
 
23.06.12
15:56
left outer join наверное надо писать
24 izekia
 
23.06.12
15:57
(22) как же так, без английского сложно
примеры там есть, посмотри
25 izekia
 
23.06.12
15:57
union точно есть
26 Sakura
 
23.06.12
15:58
вот еще более простой запрос, был с лефт джойном, убрали

SELECT * FROM "sotr", "Otd" WHERE ( "sotr.otdel" = "Otd.Otdel" ) AND ( "Otd.code_n" = "sotr.Code" )

ругается, что столбец sotr.otdel не найден. он точно есть, пишется именно так.
27 izekia
 
23.06.12
16:02
28 izekia
 
23.06.12
16:03
а не так надо "sotr"."otdel" ?
29 izekia
 
23.06.12
16:06
по синтаксису точно надо писать left outer join

table [{CROSS | INNER | LEFT OUTER | RIGHT OUTER}
   JOIN table ON Expression] [, ...]
30 izekia
 
23.06.12
16:07
ну и union должен работать
показывай текст запроса с объединением, который не работает
31 izekia
 
23.06.12
16:11
да, кстати в кавычках надо писать отдельно имя таблицы и соответственно отдельно имя поля
то есть надо как в (28) тогда ругаться не будет, ну если соответственно все остальные поля поправишь
32 Torquader
 
23.06.12
21:59
А что не судьба сделать два запроса - сначала по проектам, а потом общую сумму - вы пытаетесь два запроса запихать в один, но серверу-то всё равно два исполнять.
Ещё один вариант - просуммировать все колонки на этапе вывода (вроде бы в access-е была команда, которая это умеет).
33 smaharbA
 
23.06.12
22:03
нахера ооо для работы с сапросами ?
34 andrewks
 
23.06.12
22:11
(9)
SELECT SUM( "Summ" ) FROM "Project" WHERE ( "finished" = True )
35 Sakura
 
23.06.12
22:31
(32) Скажи как это сделать
(33) аксесса нет и не будет, а нужны еще и формы и прочие красявости. рисовать на сях времени нет уже, надо быстро и просто
(34) спс, попробую, но уже не сегодня
36 andrewks
 
23.06.12
22:33
(35) 1. в (17) всё сказали уже
37 Sakura
 
23.06.12
22:35
(36) я ж ответила, юнион не работает
38 andrewks
 
23.06.12
22:36
(26) "ругается, что столбец sotr.otdel не найден. он точно есть, пишется именно так." может, он не otdel, а Otdel, например?
39 andrewks
 
23.06.12
22:36
(37) не может быть
40 andrewks
 
23.06.12
22:37
SELECT null, null, null, null, SUM( "Summ" ) FROM "Project" WHERE ( "finished" = True ) GROUP BY null, null, null, null
41 andrewks
 
23.06.12
22:41
и вообще, ОО уже 3.4, а LO даже 3.5
42 Sakura
 
23.06.12
23:44
(41) с репами ЛО косяк какой-то, не работают у меня, а ОО - какой встал по дефолту тот и юзаю, это резервная машина, пока основная ждет ремонта
43 izekia
 
24.06.12
11:18
а что, то что я написал никто не читает)
44 Sakura
 
24.06.12
16:05
(29) попробовала, не работает. сказала ж, ни юнион, ни соединения не рабботают, мать их
45 andrewks
 
24.06.12
18:05
46 izekia
 
24.06.12
20:05
(45) она писала про плохой английский
(44)где-то там нужно переключиться на "прямой sql" (direct sql)
а (28) помогло?
47 Sakura
 
24.06.12
20:10
(46) 3. не пробовала еще, не до того было
48 izekia
 
24.06.12
20:11
(47) ну просто в том посте я сомневался, сейчас уверен, что проблема именно в этом, посмотрел уже правильный синтаксис
49 Asmody
 
24.06.12
20:19
нет в base юнионов. а direct sql нужен при работе с внешними БД, чтобы запрос не ОО обрабатывал, а двиг БД
50 Пеппи
 
24.06.12
20:25
(49) в смысле нет юнионов в бейс? имеешь в виду ОО или ...?
51 izekia
 
24.06.12
20:26
(49) в base же hsqldb, он и будет обрабатывать, и об этом и написано по ссылке