我的模式是:
国家(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年的平均值)?困在这个问题上,我是一个学生寻找解决这个问题,所以请让我知道它可能或没有任何好的线索?
2条答案
按热度按时间cnwbcb6i1#
类似这样的东西,如果id是一个自动编号,你只有一个国家队。
如果id是一个团队的id,并且您有另一个表“team”,其中id是这个表的外键,那么您有这样的内容
ac1kyiln2#
你的答案很简单
在你的情况下,你会有这样的东西:
查询的意思是:
从“团队”表中的“国家”列中选择满足“年份”为2015-12-17和2019-12-17之间值的条件的行。
如果你寻找“sql日期范围”或类似的东西,google上会有很多结果。还有其他方法可以解决您的问题,例如使用
BETWEEN
操作。