powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Update таблицы
6 сообщений из 6, страница 1 из 1
Update таблицы
    #39438985
Hysteresis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем доброго времени суток. Нужна помощь с написанием запроса для hibernate пока на sql. Есть несколько таблиц
Схема бд

Требуется написать запрос, который будет обновлять COMP_BALANCE "деньгами"= sum(route_price*count(event_id)), т.е. в ивентс будут приходить сообщения(bus_id + время оплаты), стоимость проезда route_price может быть уникальна для каждого route_number, в свою очередь route_number связан отношением один ко многим с bus_id. Написал запрос, пока не очень правильный, возвращает 2 значения:
Запрос
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
SELECT  COM.COMPANY_ID,
        (COUNTEVENTS*R.ROUTE_PRICE) AS TOTALSUM
  FROM  COMPANIES COM
        INNER JOIN 
        ROUTES R  ON 
          R.COMPANY_ID = COM.COMPANY_ID
        INNER JOIN  
        BUSES B ON 
          B.COMPANY_ID = COM.COMPANY_ID
        INNER JOIN (
            SELECT  COUNT(E.EVENT_ID) AS COUNTEVENTS, 
                    E.BUS_ID 
              FROM  EVENTS E 
        -- WHERE TO_DATE(E.PAYMENT_TIME) = TO_DATE(sysdate)
          GROUP BY  E.BUS_ID
        )E  ON 
            E.BUS_ID=B.BUS_ID 
  GROUP BY  COM.COMPANY_ID, COUNTEVENTS*R.ROUTE_PRICE
  order by COM.COMPANY_ID;


Возвращает 2 значения:
Код: plaintext
1.
2.
3.
 Company_id  Totalsum
  46	             60
  48	            100
Теперь хочу их заапдейтить в companies.comp_balance. Пишу запрос:
Запрос2
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
update  COMPANIES  CM 
  SET   (CM.COMP_BALANCE) in
        (
          SELECT  COM.COMPANY_ID AS CMID,
                  (COUNTEVENTS*R.ROUTE_PRICE) AS TOTALSUM
            FROM  COMPANIES COM
                  INNER JOIN 
                    ROUTES R  ON 
                      R.COMPANY_ID = COM.COMPANY_ID
                  INNER JOIN  
                    BUSES B ON 
                      B.COMPANY_ID = COM.COMPANY_ID
                  INNER JOIN (
                    SELECT  COUNT(E.EVENT_ID) AS COUNTEVENTS,
                            E.BUS_ID 
                      FROM  EVENTS E 
        -- WHERE TO_DATE(E.PAYMENT_TIME) = TO_DATE(sysdate)
                  GROUP BY  E.BUS_ID
         
         )E  ON 
             E.BUS_ID=B.BUS_ID  
      GROUP BY  COM.COMPANY_ID, COUNTEVENTS*R.ROUTE_PRICE)AA  
  where CM.COMPANY_ID = AA.CMID;


Пишет
ошибка
Error starting at line : 22 in command -
update COMPANIES CM
SET (CM.COMP_BALANCE) in
(
SELECT COM.COMPANY_ID AS CMID,
(COUNTEVENTS*R.ROUTE_PRICE) AS TOTALSUM
FROM COMPANIES COM
INNER JOIN
ROUTES R ON
R.COMPANY_ID = COM.COMPANY_ID
INNER JOIN
BUSES B ON
B.COMPANY_ID = COM.COMPANY_ID
INNER JOIN (
SELECT COUNT(E.EVENT_ID) AS COUNTEVENTS,
E.BUS_ID
FROM EVENTS E
-- WHERE TO_DATE(E.PAYMENT_TIME) = TO_DATE(sysdate)
GROUP BY E.BUS_ID

)E ON
E.BUS_ID=B.BUS_ID
GROUP BY COM.COMPANY_ID, COUNTEVENTS*R.ROUTE_PRICE)AA
where CM.COMPANY_ID = AA.CMID
Error at Command Line : 23 Column : 27
Error report -
SQL Error: ORA-00927: missing equal sign
00927. 00000 - "missing equal sign"
*Cause:
*Action:

Направьте в нужную сторону)
...
Рейтинг: 0 / 0
Update таблицы
    #39438987
dmdmdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> SET (CM.COMP_BALANCE) in

> "missing equal sign"

Вроде все понятно.

Изучите основы SQL.
...
Рейтинг: 0 / 0
Update таблицы
    #39438988
Hysteresis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Писал SET (CM.COMP_BALANCE) = (... Ошибка была
ОшибкаSP2-0158: unknown SET option "(cm.comp_balance)"
>>Query Run In:Query Result
Error starting at line : 22 in command -
update COMPANIES CM
SET (CM.COMP_BALANCE) =
(
SELECT COM.COMPANY_ID AS CMID,
(COUNTEVENTS*R.ROUTE_PRICE) AS TOTALSUM
FROM COMPANIES COM
INNER JOIN
ROUTES R ON
R.COMPANY_ID = COM.COMPANY_ID
INNER JOIN
BUSES B ON
B.COMPANY_ID = COM.COMPANY_ID
INNER JOIN (
SELECT COUNT(E.EVENT_ID) AS COUNTEVENTS,
E.BUS_ID
FROM EVENTS E
-- WHERE TO_DATE(E.PAYMENT_TIME) = TO_DATE(sysdate)
GROUP BY E.BUS_ID

)E ON
E.BUS_ID=B.BUS_ID
GROUP BY COM.COMPANY_ID, COUNTEVENTS*R.ROUTE_PRICE)AA
where CM.COMPANY_ID = AA.CMID
Error at Command Line : 43 Column : 59
Error report -
SQL Error: ORA-00933: SQL command not properly ended
00933. 00000 - "SQL command not properly ended"
*Cause:
*Action:
...
Рейтинг: 0 / 0
Update таблицы
    #39438989
dmdmdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> SET (CM.COMP_BALANCE) = (...
> Ошибка была

Повторяю - изучите основы SQL. Не надо выдумывать синтаксис. Надо читать текст ошибки. Надо прочесть документацию (для кого я это говорю?).
...
Рейтинг: 0 / 0
Update таблицы
    #39438990
Hysteresis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
dmdmdm,

Прежде чем пойти читать документацию, последний вопрос - это через update можно сделать вообще? Обновить сразу несколько записей
...
Рейтинг: 0 / 0
Update таблицы
    #39438992
dmdmdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
это через update можно сделать вообще? Обновить сразу несколько записей

Да.

Дао дэ цзин, сын мой.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Update таблицы
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]