SQL查询以查找参加过所有比赛的球队?

时间:2018-10-17 19:35:58

标签: mysql database

我的模式是:

  1. 国家(countryName **(主键)**)
  2. 具有复合主键(年,日期)的比赛(年,日期)
  3. 团队(ID,年,国家)具有综合PK(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年平均)?卡在此查询上,我是一名学生,正在寻找该查询的解决方案,所以请让我知道它的可能或不好的线索?

2 个答案:

答案 0 :(得分:1)

如果id是一个自动编号,并且每个国家/地区只有1个小组,则类似这样。

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)

答案 1 :(得分:0)

您的答案将很简单

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之间的值的行。 < / p>

如果您查找“ SQL日期范围”或类似内容,Google上会有很多结果。还有其他方法可以解决您的问题,例如使用BETWEEN操作。

相关问题