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 JOIN
returns匹配31
条记录,第二个returns匹配49
条记录。 CASE
表达式检查是否存在任何匹配项并相应地更新 rd_1
字段。
我正在尝试使用 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 JOIN
returns匹配31
条记录,第二个returns匹配49
条记录。 CASE
表达式检查是否存在任何匹配项并相应地更新 rd_1
字段。