Я пытаюсь получить результаты запроса от школ, которые были в определенном регионе с течением времени. Я создал запросы, которые, по моему мнению, должны делать это -
SELECT *
FROM team t1
JOIN district_team t2 ON t1.school_name = t2.team_name
join district t3 ON t2.district_num = t3.districut_number
JOIN region_district t4 ON (t2.season = t4.season AND t3.districut_number = t4.district_num AND t4.region_num = 3);
SELECT result.school_name, result.region_num, result.season
FROM (SELECT * from team t1
JOIN district_team t2 ON t1.school_name = t2.team_name
join district t3 ON t2.district_num = t3.districut_number
NATURAL JOIN region_district t4)result
WHERE result.region_num = 3;
, но эти запросы не дают результатов, даже если первый запрос дает результаты в области 3.
--- Схема таблиц в запросе ---
CREATE TABLE `team` (
`school_name` VARCHAR(50) NOT NULL,
`mascot_name` VARCHAR(50) NULL DEFAULT NULL,
PRIMARY KEY (`school_name`)
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB
;
CREATE TABLE `district_team` (
`district_num` INT(11) NOT NULL,
`team_name` VARCHAR(50) NOT NULL DEFAULT '',
`season` INT(11) NOT NULL,
INDEX `district_fk` (`district_num`),
INDEX `team_district_fk` (`team_name`),
CONSTRAINT `district_fk` FOREIGN KEY (`district_num`) REFERENCES `district` (`districut_number`),
CONSTRAINT `team_district_fk` FOREIGN KEY (`team_name`) REFERENCES `team` (`school_name`)
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB
;
CREATE TABLE `district` (
`districut_number` INT(11) NOT NULL,
PRIMARY KEY (`districut_number`)
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB
;
CREATE TABLE `region_district` (
`district_num` INT(11) NOT NULL,
`region_num` INT(11) NOT NULL,
`season` INT(11) NULL DEFAULT NULL,
INDEX `region_fk` (`region_num`),
INDEX `district_region_fk` (`district_num`),
CONSTRAINT `district_region_fk` FOREIGN KEY (`district_num`) REFERENCES `district` (`districut_number`),
CONSTRAINT `region_fk` FOREIGN KEY (`region_num`) REFERENCES `region` (`region_number`)
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB
;
Кто-нибудь знает, почему это происходит или что здесь происходит? Может ли это быть проблемой кодировки символов?
UPDATE ---
Запрос работает, когда я сообщаю таблице, какой индекс использовать или игнорировать индекс , Таким образом, эти запросы дают ожидаемый результат -
SELECT *
FROM team t1
JOIN district_team t2 ON t1.school_name = t2.team_name
join district t3 ON t2.district_num = t3.districut_number
JOIN region_district t4 IGNORE INDEX(region_fk) ON (t2.season = t4.season AND t3.districut_number = t4.district_num AND t4.region_num = 3);
SELECT *
FROM team t1
JOIN district_team t2 ON t1.school_name = t2.team_name
join district t3 ON t2.district_num = t3.districut_number
JOIN region_district t4 use INDEX(region_fk) ON (t2.season = t4.season AND t3.districut_number = t4.district_num AND t4.region_num = 3);
Но этот запрос не
SELECT *
FROM team t1
JOIN district_team t2 ON t1.school_name = t2.team_name
join district t3 ON t2.district_num = t3.districut_number
JOIN region_district t4 ON (t2.season = t4.season AND t3.districut_number = t4.district_num AND t4.region_num = 3);
Кто-нибудь знает, почему это произойдет?
изображение выполнения вышеуказанного запроса