sql查询找到参加过所有比赛的球队?

hjqgdpho  于 2021-06-20  发布在  Mysql
关注(0)|答案(2)|浏览(216)

我的模式是:
国家(countryname**(主键)**)
具有复合主键(年,日期)的锦标赛(年,日期)
具有复合pk(id,年份,国家)的团队(id,年份,国家)
比赛表中的数据是:

CREATE TABLE `tournament` (
  `Year` date NOT NULL,
  `Country` varchar(50) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

INSERT INTO `tournament` (`Year`, `Country`) VALUES
('2015-12-17', 'Canada'),
('2015-12-17', 'USA'),
('2016-12-17', 'Canada'),
('2016-12-17', 'USA'),
('2017-12-17', 'UK'),
('2017-12-17', 'USA'),
('2018-12-17', 'China'),
('2018-12-17', 'USA'),
('2019-12-17', 'Australia'),
('2019-12-17', 'USA');

ALTER TABLE `tournament`
  ADD PRIMARY KEY (`Year`,`Country`),
  ADD KEY `country_tournament_FK` (`Country`);

ALTER TABLE `tournament`
  ADD CONSTRAINT `country_tournament_FK` FOREIGN KEY (`Country`) REFERENCES `country` (`Name`);
COMMIT;

团队表格中的数据:

CREATE TABLE `team` (
  `Year` date NOT NULL,
  `ID` int(50) NOT NULL,
  `Country` varchar(50) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

INSERT INTO `team` (`Year`, `ID`, `Country`) VALUES
('2015-12-17', 6, 'Australia'),
('2016-12-17', 2, 'Canada'),
('2019-12-17', 1, 'China'),
('2016-12-17', 1, 'UK'),
('2017-12-17', 2, 'UK'),
('2015-12-17', 5, 'USA'),
('2016-12-17', 5, 'USA'),
('2017-12-17', 5, 'USA'),
('2018-12-17', 5, 'USA'),
('2019-12-17', 5, 'USA');

ALTER TABLE `team`
  ADD PRIMARY KEY (`Year`,`ID`),
  ADD KEY `team_country_fk` (`Country`);

ALTER TABLE `team`
  ADD CONSTRAINT `team_country_fk` FOREIGN KEY (`Country`) REFERENCES `country` (`Name`) ON DELETE CASCADE ON UPDATE CASCADE,
  ADD CONSTRAINT `team_tournament_fk_final` FOREIGN KEY (`Year`) REFERENCES `tournament` (`Year`) ON DELETE CASCADE ON UPDATE CASCADE;
COMMIT;

我想选择那些参加过所有比赛的球队(2015年至2019年的平均值)?困在这个问题上,我是一个学生寻找解决这个问题,所以请让我知道它可能或没有任何好的线索?

cnwbcb6i

cnwbcb6i1#

类似这样的东西,如果id是一个自动编号,你只有一个国家队。

select country    
from team
group by country
having Count(*)=(select count(distinct year) from tournament)

如果id是一个团队的id,并且您有另一个表“team”,其中id是这个表的外键,那么您有这样的内容

select team.id
from team
group by team.id
having Count(*)=(select count(*) from tournament)
ac1kyiln

ac1kyiln2#

你的答案很简单

SELECT X FROM Y WHERE CONDITION_1 AND CONDITION_2

在你的情况下,你会有这样的东西:

SELECT Country FROM team WHERE Year >= 2015-12-17 AND Year <= 2019-12-17

查询的意思是:
从“团队”表中的“国家”列中选择满足“年份”为2015-12-17和2019-12-17之间值的条件的行。
如果你寻找“sql日期范围”或类似的东西,google上会有很多结果。还有其他方法可以解决您的问题,例如使用 BETWEEN 操作。

相关问题