MS Access中玩家自关联匹配表的关系设置与SQL查询问题
关系设置确认与方法
你的操作是正确的,具体步骤如下:
- 打开Access的关系窗口,先添加一次
PLAYER表,再次添加该表时,Access会自动将第二个表命名为PLAYER_1 - 将
MATCH表的player_name_id字段拖到第一个PLAYER表的player_id字段,创建一对多关系 - 将
MATCH表的opponent_name_id字段拖到第二个PLAYER表的player_id字段,同样创建一对多关系 - 勾选实施参照完整性,避免外键引用不存在的玩家ID
正确的SQL查询语句
通过给PLAYER表设置两个别名,分别关联对战双方的ID,并添加过滤条件排除自对战数据:
SELECT M.match_id, P1.player_name AS 玩家名称, P2.player_name AS 对手名称 FROM MATCH AS M INNER JOIN PLAYER AS P1 ON M.player_name_id = P1.player_id INNER JOIN PLAYER AS P2 ON M.opponent_name_id = P2.player_id WHERE P1.player_id <> P2.player_id;
- 用
AS给表设置别名P1(玩家)、P2(对手),区分两次关联的同一张表 WHERE子句P1.player_id <> P2.player_id直接过滤掉玩家对战自己的无效记录- 若需要保留所有比赛记录(包括无效记录),可将
INNER JOIN替换为LEFT JOIN,但推荐用INNER JOIN保证数据有效性
内容的提问来源于stack exchange,提问作者Korsa
相关产品推荐
相关产品推荐

