我的问题有点太长了:
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列仍然只包含空值。
我做错了什么?
答案 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)