我正在尝试使用where子句对2个表的内部联接进行更新。 我目前有一个半工作更新。我想只在2个条件成立时才更新表。我想我需要有1个内部和1个ounter连接才能做到这一点,我不知道该怎么做。
我有一组带选秀权的门票,我想在有特定选秀权的门票中添加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;
答案 0 :(得分:1)
试试这个:
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 JOIN
返回匹配的31
个记录,第二个返回匹配的49
个记录。 CASE
表达式检查是否确实存在任何匹配项,并相应地更新rd_1
字段。