Мой вопрос был бы слишком длинным, поэтому:
TL; DR
Коррелированное обновление Oracle не работает должным образом, оставляя столбец жертвы без изменений.
Структура таблиц
СТУДЕНТЫ:
STUDENT_ID NUMBER(5,0)
LAST_NAME VARCHAR2(15 BYTE)
FIRST_NAME VARCHAR2(15 BYTE)
MIDDLE_NAME VARCHAR2(15 BYTE)
FINANCIAL_AID NUMBER(7,2)
CLASS_NO VARCHAR2(15 BYTE)
SPECIALITY VARCHAR2(100 BYTE)
КЛАССЫ:
CLASS_NO VARCHAR2(15 BYTE)
SPECIALITY_NO NUMBER(5,0)
СПЕЦИАЛЬНОСТИ:
SPECIALITY_ID NUMBER(5,0)
SPECIALITY_NAME VARCHAR2(40 BYTE)
Задача
По сути, мне нужно дополнить столбец таблицы STUDENTS SPECIALTY значениями SPECIALITY_NAME (сейчас он заполнен null
s), которые я могу получить через соединение с таблицами CLASSES и SPECIALTIES (да, я знаю, что это странно и нарушит нормализацию базы данных , но это задача).
Итак, вот что я пытаюсь сделать:
UPDATE STUDENTS S SET SPECIALITY = (SELECT SPECIALITY_NAME FROM
(SELECT * FROM STUDENTS NATURAL JOIN
CLASSES NATURAL JOIN SPECIALITIES) ALLS
WHERE S.STUDENT_ID = ALLS.STUDENT_ID)
Проблема
Oracle говорит, что N строк обновлено. , следовательно, результат запроса, кажется, в порядке, но столбец SPECIALTY в таблице STUDENTS по-прежнему содержит только нули.
Что я делаю не так?