具有多个 WHERE(关系)条件的 SQL UPDATE

标签 sql oracle plsql oracle-sqldeveloper

我想知道是否可以在 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/

相关文章:

sql - 如何获取同一表连续行中具有不同值的列的名称和值

sql - 获取数据库 session 过期时间

sql - Oracle中将字符串拆分为多行

SQL同时选择和计数

MySQL 三个表的复杂连接

mysql - 仅显示每个对话的最新消息

java - 为什么我在这里得到 ORA-00979?

c# - ORA-06550 : line 1, 第 7 列:PLS-00306:参数的数量或类型错误

SQL 按日期复制行到今天

performance - Oracle/PLSQL 性能