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

标签 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

最佳答案

如果您希望所有行都从 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
 );

关于mysql - 将一行的结果调整为其他行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39853015/

相关文章:

shell - shell 中的方括号(测试条件)内容和高级案例陈述

MYSQL限制按类别返回数据

mysql - 使用sqoop增量更新更新Hive表

java - 比较 ArrayList 中的字符串。区分大小写

mysql - 如何比较mysql中的Varchar字段

sql - 在 WHERE 字段中使用 CASE

sql - SQL Server 中为 null 时的情况

php - 计算与 id 相关的数据库行数

mysql - EC2实例重启后如何保留ProxySQL的配置?

mysql - 如何根据不同类别的分数将 "rank"列添加到mysql表中?