将一行的结果调整为其他行

时间:2016-10-04 12:59:46

标签: mysql case

如何以这种方式编写查询,CASE WHEN语句的结果适用于每一行。所以在每一行中结果都是5.非常感谢你!

CREATE TABLE DATA
(`Person` CHAR(4),
 `Apples` INT(1),
 `Tomatoes` INT(1),
 `Result` INT(1)
  );

 INSERT INTO DATA
 (Person, Apples, Tomatoes)
  VALUES ('Mark' , 1, 2),
    ('Sepp',  2, 3),
    ('Carl',  3, 1);

 UPDATE  DATA
 SET `Result` = CASE WHEN (`Person` =  'Sepp') THEN (`Apples` + `Tomatoes`)  END;

Table of result as it should be

SQL fiddle demonstration

1 个答案:

答案 0 :(得分:1)

如果您希望所有行都从Sepps行获取值,您可以使用子查询来完成。

“正常”的方式是这样做:

UPDATE DATA
SET Result = (SELECT Apples + Tomatoes FROM DATA WHERE Person =  'Sepp')

但这很可能会给你一个MySQL错误(无法指定更新的目标表),解决方法是在查询中引入另一个级别,强制使用临时表,像这样:

UPDATE DATA
 SET Result = (
   SELECT Value FROM (
     SELECT Apples + Tomatoes AS Value 
     FROM DATA WHERE Person =  'Sepp'
   ) t
 );