我现在正试图使用来自未规范化“摘要”表的数据填充我的'testMatch'表(下方):
TESTMATCH TABLE
+------------------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------------+--------------+------+-----+---------+-------+
| match_id | int(11) | NO | PRI | NULL | |
| match_date | date | YES | | NULL | |
| ground | varchar(50) | YES | MUL | NULL | |
| homeTeam | varchar(100) | YES | MUL | NULL | |
| awayTeam | varchar(100) | YES | MUL | NULL | |
| matchResult | varchar(100) | YES | MUL | NULL | |
| manOfMatch | varchar(30) | YES | | NULL | |
| homeTeam_captain | int(10) | YES | MUL | NULL | |
| homeTeam_keeper | int(10) | YES | MUL | NULL | |
| awayTeam_captain | int(10) | YES | MUL | NULL | |
| awayTeam_keeper | int(10) | YES | MUL | NULL | |
+------------------+--------------+------+-----+---------+-------+
填充match_id没有问题-----> manOfMatch - 它是'homeTeam_captain','homeTeam_keeper','awayTeam_captain'和'awayTeam_keeper',我遇到了问题。
摘要表
mysql> DESCRIBE SUMMARY;
+-----------------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------------+--------------+------+-----+---------+-------+
| matchID | int(11) | NO | PRI | NULL | |
| Test | int(11) | YES | | NULL | |
| matchDate | date | YES | | NULL | |
| Ground | varchar(50) | YES | | NULL | |
| HomeTeam | varchar(100) | YES | | NULL | |
| AwayTeam | varchar(100) | YES | | NULL | |
| matchResult | varchar(50) | YES | | NULL | |
| MarginRuns | int(11) | YES | | NULL | |
| MarginWickets | int(11) | YES | | NULL | |
| ManOfMatch | varchar(40) | YES | | NULL | |
| HomeTeamCaptain | varchar(30) | YES | | NULL | |
| HomeTeamKeeper | varchar(30) | YES | | NULL | |
| AwayTeamCaptain | varchar(30) | YES | | NULL | |
| AwayTeamKeeper | varchar(30) | YES | | NULL | |
+-----------------+--------------+------+-----+---------+-------+
我需要以某种方式从摘要中选择数据,获取相应的player_id并将player_id输入到我的'testMatch'中。玩家表格如下:
球员表
mysql> describe players;
+----------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------------+--------------+------+-----+---------+----------------+
| player_id | int(11) | NO | PRI | NULL | auto_increment |
| player_surname | varchar(30) | YES | | NULL | |
| team | varchar(100) | YES | MUL | NULL | |
+----------------+--------------+------+-----+---------+----------------+
所以要澄清一下,例如。我想选择homeTeam_captain数据FROM摘要表但不是名字,我想要相应的player_id。
我假设我需要使用某种连接/子查询来完成这个...我尝试选择:
select matchID, player_id, player_surname, team from players p, summary
s
where
s.hometeamcaptain = p.player_surname ORDER BY matchID;
但这会带回73行,应该只有65行(65场比赛)。
我希望这是有道理的,谢谢你的帮助!! 颖
答案 0 :(得分:1)
名称是否重叠?如果是这样,也要确保团队对应(将s.HomeTeam = p.team
添加到where块)。如果一个团队中有同名的玩家,则必须手动解决这些冲突。
要一次选择 all 守护者/队长,您需要left outer joins。我猜这将是每个玩家一次加入,所以你必须加入同一张桌子4次。
选择正确的数据后,您可以使用INSERT ... SELECT将其插入testMatch
表。