这是带有附加“标准/过滤器”表的可能解决方案:
-- SAMPLE TEAMS: Yankees, Knicks:
INSERT INTO `team` VALUES (1,'Yankees',2),(2,'Knicks',1);
-- SAMPLE YOUTH TEAMS: Yankees Juniors, Knicks Juniors
INSERT INTO `youth_team` VALUES (1,'Knicks Juniors',1),(2,'Yankees Juniors',2);
-- SAMPLE PLAYERS
INSERT INTO `youth_player` VALUES       
  (1,'Carmelo','Anthony',16,20,7.5,'scorer',1),
  (2,'Amar\'e','Stoudemire',17,45,5.5,'playmaker',1),
  (3,'Iman','Shumpert',15,15,6.1,'playmaker',1),
  (4,'Alex','Rodriguez',18,60,3.5,'playmaker',2),
  (5,'Hiroki','Kuroda',16,17,8.7,'scorer',2),
  (6,'Ichiro','Suzuki',19,73,8.3,'playmaker',2);
-- CRITERIA TABLE
CREATE TABLE `criterias` (
  `id` int(11) NOT NULL,
  `age` int(11) DEFAULT NULL,
  `position` varchar(45) DEFAULT NULL,
  `min_rating` double DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
-- SAMPLE CRITERIAS
-- AGE=16, POSITION=SCORER, MIN_RATING=7
-- AGE=15, POSITION=PLAYMAKER, MIN_RATING=5.5
INSERT INTO `criterias` VALUES (1,16,'scorer',7), (2,15,'playmaker',5.5);
现在您的查询可能如下所示:
SELECT team.teamName, youth_team.youthTeamName, youth_player.*
FROM youth_player
    CROSS JOIN criterias
    INNER JOIN youth_team ON youth_player.youthTeamID = youth_team.youthTeamID
    INNER JOIN team ON youth_team.teamID = team.teamID
WHERE 
(
    youth_player.youthPlayerAge < 18
    AND youth_player.youthPlayerDays < 21
    AND youth_player.youthPlayerRating >= 5.5
) 
AND
(
    youth_player.youthPlayerAge = criterias.age
    AND youth_player.youthPlayerPosition = criterias.position
    AND youth_player.youthPlayerRating >= criterias.min_rating
)
这产生(缩短的结果):
teamName  youthTeamName     youthPlayerName   Age   Days  Rating  Position   
=============================================================================
Yankees   "Knicks Juniors"  Carmelo Anthony   16    20    7.5     scorer        
Yankees   "Knicks Juniors"  Iman Shumpert     15    15    6.1     playmaker   
Knicks    "Yankees Juniors" Hiroki Kuroda     16    17    8.7     scorer