Sql Query, чтобы найти команды, которые играли во всех турнирах? - PullRequest
0 голосов
/ 17 октября 2018

Моя схема:

  1. страна (название страны ** (первичный ключ) **)
  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 голосов
/ 17 октября 2018

Примерно так, если id - это автономный номер, и у вас есть только 1 команда на страну.

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

Если id - это идентификатор команды, и у вас есть другая таблица «team», где id - это внешний ключ этой таблицы, у вас есть что-то вроде этого

select team.id
from team
group by team.id
having Count(*)=(select count(*) from tournament)
0 голосов
/ 17 октября 2018

Ваш ответ будет простым

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.

Естьмного результатов в Google, если вы ищете "SQL Date Range" или подобные вещи.Есть и другие способы решения вашей проблемы, например, с помощью операции BETWEEN.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...