簡體   English   中英

如何比較來自兩個不同表SQL的數據

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM