Проблемы с коррелированным обновлением в Oracle SQL - PullRequest
0 голосов
/ 05 сентября 2011

Мой вопрос был бы слишком длинным, поэтому:

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 по-прежнему содержит только нули.

Что я делаю не так?

1 Ответ

1 голос
/ 05 сентября 2011

Попробуйте вместо этого

update students s set specialty = 
   (select sp.specialty_name from classes c
    join specialities sp
      on sp.speciality_number = c.speciality_number
    where c.class_no = s.class_no)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...