我有这样的表(通过外键互连):
STUDENT: SNUM ,SNAME,FEES
FACULTY: FID ,FNAME
课程: CNAME ,TIME,FID
登记: 的 SNUM,CNAME
要求: 更新学生的费用15%,Kavya教授正在教学。
我尝试了以下查询,但无效
UPDATE STUDENT SET FEES=FEES*1.15 WHERE SNUM IN
(
SELECT DISTINCT S.SNUM
FROM STUDENT S, COURSE C, ENROLLED E, FACULTY F
WHERE S.SNUM = E.SNUM AND E.CNAME = C.CNAME
AND C.FID = F.FID
AND F.FNAME = 'KAVYA'
);
错误:您无法在FROM子句中指定要更新的目标表STUDENT。
请帮助我解决这个问题
答案 0 :(得分:0)
这是因为在MySQL
中,您无法更新在SELECT
查询中使用的同一个表。您可以通过加入来改变它:
UPDATE STUDENT a
INNER JOIN
(
SELECT DISTINCT S.SNUM
FROM STUDENT S, COURSE C, ENROLLED E, FACULTY F
WHERE S.SNUM = E.SNUM AND E.CNAME = C.CNAME
AND C.FID = F.FID
AND F.FNAME = 'KAVYA'
) b ON a.SNUM = b.SNUM
SET a.FEES = a.FEES * 1.15
答案 1 :(得分:0)
在MySQL中您无法更新表并从已记录here的子查询中的同一表中进行选择。您可以将查询更改为连接而不是子查询,如下所示,
UPDATE STUDENT S
JOIN ENROLLED E ON S.SNUM = E.SNUM
JOIN COURSE C ON E.CNAME = C.CNAME
JOIN FACULTY F ON C.FID = F.FID
SET FEES=FEES*1.15
WHERE F.FNAME = 'KAVYA';