簡體   English   中英

MySQL查詢從另一個表的多個列中從一個表中獲取多個值

[英]MySQL query to get multiple values from 1 table based on multiple columns from other table

我有這個表結構(我們稱這個表為teams ):

id | player1 | player2 | player3
1  | 13      | 25      | 50

這(讓我們將此表稱為players ):

id | pts
13 | 5
25 | 10
50 | 12

有沒有寫一個查詢來獲取的方式pts vlaue為每個從表中的一行球員teams

例如,如果我想獲取player1的pts值,則可以執行以下操作:

select teams.id,players.pts from teams left join players on teams.player1=players.id

我需要同時為所有3位玩家執行此操作(實際上,有18位玩家,而不是3位-但相同的原理應該起作用)。

我知道我可以遍歷它們,但這似乎不是最佳解決方案。

我認為一個更好的主意是具有以下結構:

團隊

team_id | name
----------------
1       | Team 1
2       | Team 2
3       | Team 3

玩家們

player_id | pts
---------------
1         | 10
2         | 5
3         | 25

team_players_xrefs

team_id | player_id
-------------------
1       | 1
1       | 2
2       | 3

然后使用以下查詢:

SELECT
  player_id,
  pts
FROM
  teams_players_xrefs
INNER JOIN
  players USING (player_id)
WHERE
  team_id = 1

得到以下結果:

player_id | pts
---------------
1         | 10
2         | 5

這是SQL Fiddle

SELECT
  player1.pts AS player1_pts,
  player2.pts AS player2_pts,
  player3.pts AS player3_pts
FROM
  teams
  LEFT JOIN players AS player1 ON team.player1=player1.id
  LEFT JOIN players AS player2 ON team.player2=player2.id
  LEFT JOIN players AS player3 ON team.player3=player3.id
WHERE
   ...

您可以離開每個玩家的players表,這可以工作,但實際上並不是理想的解決方案。 不幸的是,由於您的表結構是您可以做的最好的。

創建一個映射表,將團隊與玩家映射會更好。 例如:

CREATE TABLE teams
(
  id INT,
  PRIMARY KEY(id)
 );

CREATE TABLE team_players
(
  team_id INT,
  player_id INT
)

然后,您可以通過team_id進行查詢,並輕松返回該團隊中的所有球員。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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