如何在MYSQL中使用UPDATE和IN?

时间:2018-01-24 06:41:06

标签: mysql database sql-update

我有这样的表(通过外键互连):

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。

请帮助我解决这个问题

2 个答案:

答案 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';