SQL 个案更新

SQL Update for cases

我试图在连接两个表后更新列。如果一列与另一列匹配,我想将另一列更改为 'W',如果它已经是 blank/NULL,我想保留它,否则我想将其更改为 'L'。这是我拥有的:

UPDATE user_games 
LEFT JOIN games ON user_games.game_key = games.game_id 
SET user_games.result = CASE 
                            WHEN user_games.pick = games.winner then 'W';
                            WHEN games.winner = NULL then NULL;
                            ELSE 'L';
                        END;

我收到此错误:#1064 - 您的 SQL 语法有误;查看与您的 MariaDB 服务器版本对应的手册,了解在第 4 行

附近使用的正确语法

我使用的服务器版本:10.4.20-MariaDB

;用于表示一个查询的结束,不应在其间使用。
也总是使用 ISnull 而不是 =

进行比较
SET user_games.result = 
                  CASE WHEN games.winner IS NULL OR games.winner = '' then NULL
                       WHEN user_games.pick = games.winner then 'W' 
                       ELSE 'L'
                  END;

下面的查询是否解决了您的问题?

update  a
set a.result = 
CASE 
    WHEN a.pick = b.winner then 'W'
    WHEN b.winner = NULL then NULL
    ELSE 'L'
END
from user_games  a
LEFT JOIN games b ON a.game_key = b.game_id 

试试这个:你必须为 L 写一个特定的条件,因为在 ELSE 中它可以在许多条件下更新。此外,使用 IS NULL 来检查列中的 NULL 值而不是 = NULL

UPDATE user_games 
LEFT JOIN games ON user_games.game_key = games.game_id 
SET user_games.result = 
            CASE 
                WHEN user_games.pick = games.winner THEN 'W'
                WHEN games.winner IS NOT NULL AND user_games.pick <> games.winner THEN 'L'
                ELSE NULL
            END;