mysql - 我如何在 join 和 union 中使用 case?
问题描述
我有 2 张桌子:
火柴
CREATE TABLE rounds (
`roundid` INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
`roundname` VARCHAR(45) NULL);
回合
CREATE TABLE matches (
`matchid` INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
`matchwinner` VARCHAR(45) NULL,
`roundid` INT NOT NULL,
CONSTRAINT `fk_matches_rounds`
FOREIGN KEY (`roundid`)
REFERENCES `mydb`.`rounds` (`roundid`)
ON DELETE CASCADE
ON UPDATE CASCADE);
插入物
INSERT INTO rounds (`roundid`, `roundname`) VALUES (1, 'Final');
INSERT INTO rounds (`roundid`, `roundname`) VALUES (2, '3rd place');
INSERT INTO matches (`matchid`, `matchwinner`, `roundid`) VALUES (1, 'fnatic', 1);
INSERT INTO matches (`matchid`, `matchwinner`, `roundid`) VALUES (2, 'astralis', 1);
INSERT INTO matches (`matchid`, `matchwinner`, `roundid`) VALUES (3, 'fnatic', 2);
INSERT INTO matches (`matchid`, `matchwinner`, `roundid`) VALUES (4, 'fnatic', 2);
INSERT INTO matches (`matchid`, `matchwinner`, `roundid`) VALUES (5, 'astralis', 1);
INSERT INTO matches (`matchid`, `matchwinner`, `roundid`) VALUES (6, 'astralis', 1);
我的查询:
SELECT
m.matchid,
m.matchwinner Team,
CASE r.roundname
WHEN r.roundname = 'Final' THEN '1st'
ELSE '2'
END Place
FROM
matches m
JOIN rounds r ON m.roundid = r.roundid
WHERE
r.roundname = 'Final'
UNION SELECT
m.matchid,
m.matchwinner Team,
CASE r.roundname
WHEN r.roundname = '3rd place' THEN '3rd'
ELSE '4th'
END Place
FROM
matches m
JOIN rounds r ON m.roundid = r.roundid
WHERE
r.roundname = '3rd place';
我想知道
- 特定团队取得了什么成就(可能应该使用
HAVING m.matchwinner = 'fnatic'
)
MatchID - 球队 - 排名
1 - fnatic - 1st
3 - fnatic - 3rd
4 - fnatic - 3rd
- 所有团队都取得了哪些成就
MatchID - Team - Place
1 - fnatic - 1st
2 - astralis - 1st
3 - fnatic - 3rd
4 - fnatic - 3rd
依此类推
不明白为什么我的查询不起作用?
解决方案
这看起来像一个连接和条件逻辑:
select
m.matchid,
m.matchwinner team,
case r.roundname
when 'Final' then '1st'
when '3rd place' then '3rd'
end place
from rounds r
inner join matches m on m.roundid = r.roundid
where m.matchwinner = 'fnatic'
order by m.matchid
要为所有团队获得相同的结果,只需删除该where
子句。
匹配ID | 团队 | 地方 ------: | :----- | :---- 1 | fnatic | 第一 3 | fnatic | 第三 4 | fnatic | 第三
推荐阅读
- javascript - 将鼠标悬停在一个元素上以使另一个元素可见
- javascript - Discord JS 遇到问题
- typescript - 我可以从通用参数推断枚举值吗?
- sql-server - 如何在左连接上的空值的情况下重复值
- request - SKStoreReviewController.requestReview() 费率不来 Appstore
- javascript - 无法从 api 访问数据
- python - 如何简化针对列的平均值评估单元格的过程
- c++ - 当 glIsTexture 有用时
- javascript - 在 Flatlist React Native 中解析 JSON 对象
- php - 来自标头重定向 PHP 的最小延迟