oracle SQL中相关更新的问题

时间:2011-09-05 15:56:02

标签: database oracle sql-update

我的问题有点太长了:

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)

CLASSES:

CLASS_NO    VARCHAR2(15 BYTE)   
SPECIALITY_NO   NUMBER(5,0) 

专长:

SPECIALITY_ID   NUMBER(5,0)
SPECIALITY_NAME VARCHAR2(40 BYTE)

任务

基本上,我需要使用SPECIALITY_NAME值(现在它填充了null s)来增加STUDENTS表的列SPECIALTY,我可以通过连接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行已更新。,因此查询结果似乎没问题,但STUDENTS表中的SPECIALTY列仍然只包含空值。

我做错了什么?

1 个答案:

答案 0 :(得分:1)

试试这个

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)