MySQL 更新 inner/outer 加入 2 个表

MySQL update on inner/outer join over 2 tables

我正在尝试使用 where 子句对 2 table 的内部联接进行更新。 我目前有一个半工作更新。如果 2 个条件为真,我只想更新 table。我想我需要有 1 个内部连接和 1 个外部连接才能执行此操作,但我不确定该怎么做。

我有一组带选秀权的门票,我想将 45 添加到具有特定选秀权但不包括另一个选秀权的门票。

如果一张票有 team_ID = 31 而不是 team_ID = 49 的选秀权,则将 45 添加到 rd_1 如果一张票有选择 team_ID = 49 而不是 team_ID = 31 减去 45 到 rd_1 如果一张票都什么都不做 如果一张票既没有什么也不做

门票

ID | rd_1 |
1  | 100  |  
2  | 105  | 
3  | 155  | 

精选

ID | ticket_ID | team_ID
1  |    1      | 31
2  |    1      | 49
3  |    2      | 31
4  |    2      | 10    
5  |    3      | 49
6  |    3      | 50

预期结果

门票

ID | rd_1 |
1  | 100  | 
2  | 150  |  
3  | 110  | 

这是我试过的。 这将为 team_ID 为 49 的所有选秀权增加 45。从这里我想排除 team_ID =31

的选秀权
UPDATE database.ticket t INNER JOIN
       database.picks p
       ON t.ID = p.ticket_ID
    SET t.rd_1 = t.rd_1 +45
WHERE p.team_ID = 49;

试试这个:

UPDATE  ticket t
LEFT JOIN picks p1 ON t.ID = p1.ticket_ID AND p1.team_ID = 31
LEFT JOIN picks p2 ON t.ID = p2.ticket_ID AND p2.team_ID = 49
SET t.rd_1 = CASE
                WHEN p1.ID IS NOT NULL AND p2.ID IS NULL THEN t.rd_1 + 45
                WHEN p1.ID IS NULL AND p2.ID IS NOT NULL THEN t.rd_1 - 45
                ELSE t.rd_1
             END;

第一个LEFT JOINreturns匹配31条记录,第二个returns匹配49条记录。 CASE 表达式检查是否存在任何匹配项并相应地更新 rd_1 字段。

Demo here