尚未设置时使用 CASE 更新

Using CASE to update when not already set

我有一个简单的 table,如下所示:

+--------+-------+----------+
| client | value |  status  |
+--------+-------+----------+
| A      |    A1 | positive |
| B      |    B2 | neutral  |
| C      |    C3 | negative |
| D      |    B2 | neutral  |
| E      |    A1 | positive |
+--------+-------+----------+

状态字段直接与值字段相关,但是值字段会自动更改,因此我使用 select 语句来显示哪些状态字段需要更新,如下所示:

SELECT client, value, status, 
    CASE value 
        WHEN A1 THEN postive 
        WHEN B2 THEN neutral 
        ELSE negative 
    END AS new_status
FROM table
WHERE status <> CASE value 
                    WHEN A1 THEN postive 
                    WHEN B2 THEN neutral 
                    ELSE negative 
                END

这很好用,但我从来不喜欢在 SELECT 和 WHERE 子句中出现完全相同的 CASE。有没有更好的方法来编写此 SELECT 以仅显示需要更新的状态字段?

使用子查询:

SELECT  *
FROM    (   
    SELECT  client,
            value,
            status,
            CASE value
            WHEN 'A1' THEN 'postive'
            WHEN 'B2' THEN 'neutral'
            ELSE 'negative'
            END AS new_status
    FROM    table                                                                                           
    ) AS t                                                                                              
WHERE   status <> new_status