作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想知道是否可以在 oracle SQL 数据库中执行这样的更新:
UPDATE mark
SET
mark=
CASE
WHEN mark.val<= 5
THEN val*1.1
ELSE val END
WHERE mark.id_classes = classes.id_classes
AND classes.ID_subject = subject.ID_subject
AND subject.ID_subject = 5;
SQL 开发人员在这部分返回错误:
WHERE mark.id_classes = classes.id_classes
AND classes.ID_subject = subject.ID_subject
AND subject.ID_subject = 5;
所以我想不可能做出如此复杂的条件,那么有没有其他方法可以做到这一点?
尝试更多类似 SELECT
的条件可能很愚蠢,但另一方面我不明白它不起作用的原因。
最佳答案
您可以使用子查询:
UPDATE mark
SET mark = val * 1.1
WHERE mark.val <= 5 AND
EXISTS (SELECT 1
FROM classes c JOIN
subjects s
ON c.ID_subject = s.ID_subject
WHERE mark.id_classes = c.id_classes AND
s.ID_subject = 5
);
请注意,我将 CASE
条件移到了 WHERE
子句中,因此只更新需要更新的行。
关于具有多个 WHERE(关系)条件的 SQL UPDATE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55881289/
我是一名优秀的程序员,十分优秀!