[英]How to compare data from two different tables SQL
这也许很简单,但是我不确定如何去做。 我有2张桌子Match和Players
Players table
-------------
PlayerID int
PlayerName varchar(20)
TeamID int
TeamName varchar(10)
Match table
-----------
MatchID int
Team1 varchar(20)
Team2 varchar(20)
MatchDate date
例如,对于特定的比赛,我想列出两支球队的所有球员姓名。
比如说28/03/16 Liverpool vs Arsenal
,我该如何从“球员”表中获得球员名称?
您能告诉我的任何信息都会有所帮助。
不要在比赛表中将团队名称存储为team1和team2,而是存储其对应的团队ID。
编辑:每个匹配项都应具有唯一的匹配ID,因此不需要日期过滤器。
这可以帮助您使用查询检索记录:
select * from players a where exists(select 1 from match b where
b.MATCH_ID= :match_id and (a.team_id=b.team1 OR
a.team_id =b.team2))
从match
表中获取行。 如果您不知道team1是利物浦还是阿森纳,反之亦然
SELECT m.matchid
FROM match m
WHERE m.date = TO_DATE('2016-03-28','YYYY-MM-DD')
AND m.team1 IN ('Liverpool','Arsenal')
AND m.team2 IN ('Liverpool','Arsenal')
AND m.team1 <> m.team2
接下来,制作该行的两个副本...
SELECT m.matchid
FROM (SELECT 1 AS i UNION ALL SELECT 2) d
CROSS
JOIN match m
WHERE m.date = TO_DATE('2016-03-28','YYYY-MM-DD')
AND m.team1 IN ('Liverpool','Arsenal')
AND m.team2 IN ('Liverpool','Arsenal')
AND m.team1 <> m.team2
执行联接到玩家表,看起来就像我们使用teamname列进行匹配。
SELECT CASE WHEN d.i = 1 THEN m.team1 ELSE m.team2 END AS teamname
, p.playername
FROM (SELECT 1 AS i UNION ALL SELECT 2) d
JOIN match m
ON m.date = TO_DATE('2016-03-28','YYYY-MM-DD')
AND m.team1 IN ('Liverpool','Arsenal')
AND m.team2 IN ('Liverpool','Arsenal')
AND m.team1 <> m.team2
LEFT
JOIN players p
ON p.teamname IN (m.team1, m.team2)
ORDER BY d.i, p.playerid
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.