Member 12770648 Ответов: 2

Обновление таблицы из другой таблицы в oracle 11g


Нужно обновить таблицу из другой таблицы

Все примеры, которые я получил и попробовал, просто не работают.

Нужен справочный сайт с хорошим примером

Что я уже пробовал:

Все примеры, которые я получил и попробовал, просто не работают
UPDATE HL
 SET HL.ALLOW8 = H.ALLOW8 ,
 HL.ALLOW9 = H.ALLOW9 ,
 HL.ALLOW10 = H.ALLOW10 
 FROM PAYSLIP HL
 INNER JOIN PAYROLL H
 ON H.IDNO=HL.IDNO 
 WHERE HL.YEAR1 ='2017' AND H.YEAR1 ='2017'
сообщение об ошибке
ORA -00933 SQL command not properly ended

Ошибка заключается в следующем from

CHill60

Ну, без какого-либо представления о том, как выглядят ваши таблицы, что вы пытаетесь обновить или что вы уже пробовали, нам будет трудно вам помочь!

2 Ответов

Рейтинг:
0

CHill60

Вот несколько ссылок на то, что вы хотите сделать:
Гугл[^]
Если вы не можете решить свою проблему, то обязательно вернитесь с кодом, который вы пробовали, и лучшим описанием проблемы, чем "woont work" - например, фактическим сообщением об ошибке или фактическими результатами.

РЕДАКТИРОВАТЬ:
В отличие от SQL Server, Oracle не поддерживает синтаксис соединения для обновлений.
Вам нужно сделать что-то вроде следующего:

UPDATE PAYSLIP HL
 SET (ALLOW8, ALLOW9, ALLOW10) = 
   (
       SELECT ALLOW8, ALLOW9, ALLOW10
       FROM PAYROLL H WHERE H.IDNO=HL.IDNO  AND H.YEAR1 ='2017'
    )
 WHERE EXISTS (
    SELECT 1 FROM PAYROLL H
     WHERE H.IDNO=HL.IDNO  AND H.YEAR1 ='2017')
AND HL.YEAR1 ='2017';
Если вы обновляете несколько столбцов, это гораздо более эффективно использовать ПОГЛОЩАТЬ[^]. Дополнительный пример - Оператор ORACLE-BASE - MERGE[^]


Member 12770648

ОБНОВЛЕНИЕ HL
Установите HL.ALLOW8 = H. ALLOW8 ,
HL.ALLOW9 = H. ALLOW9 ,
HL.ALLOW10 = H. ALLOW10
ИЗ ПЛАТЕЖНОЙ ВЕДОМОСТИ HL
ВНУТРЕННЕЕ СОЕДИНЕНИЕ ЗАРПЛАТЕ СЕК
На H. IDNO=HL.ИДНО
Где HL.YEAR1 ='2017' и H. YEAR1 ='2017'

сообщение об ошибке

ORA -00933 SQL-команда не завершена должным образом

Ошибка заключается примерно в следующем

CHill60

Теперь, когда у меня есть эта информация, я обновил свое решение

Member 13546002

Я потратил много времени на написание кода oracle в сравнении с sql :(

Рейтинг:
0

Member 14936162

Помоги мне:

SELECT PP.REFPELICULA,PP.DINEROGENERADO, RR.DINERO
FROM PELICULAS PP
  INNER JOIN (SELECT P.REFPELICULA, SUM(R.IMPORTE) DINERO
              FROM PELICULAS P
                INNER JOIN PRESTAMOS R ON P.REFPELICULA = R.REFPELICULA
              GROUP BY P.REFPELICULA
              ) RR ON PP.REFPELICULA = RR.REFPELICULA

обновление pp.dinerogenerado = rr.dinero ??


CHill60

Если у вас есть вопрос, то используйте красную ссылку "задать вопрос" в верхней части страницы