2015-11-03 133 views
0

我有出现如下一个简单的表更新:使用情况下没有设置

+--------+-------+----------+ 
| 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 

这工作得很好,但我从来不喜欢完全相同的CASE如何同时出现在SELECT和WHERE子句。有没有更好的方式来编写这个SELECT来只显示哪些状态字段需要更新?

+0

您可以使用派生表。 –

回答

1

使用子查询:

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 
+0

哇,这很容易!甚至没有想过这么做......谢谢! –

相关问题