MySQL查询连接表数据

时间:2010-08-15 23:53:56

标签: mysql

这让我望而却步。我试图提取有关我在游戏中相互匹配的玩家的元数据。例如:球员22对阵球员54

我有2个mysql表。

表:玩家(id,name,image_url等)

1 |约翰| john.jpg |等
2 |乔治| george.jpg |等
3 |伊恩| ian.jpg |等
4 |史蒂夫| steve.jpg |等等

表:matchups(id,left_players_id,right_players_id)

1 | 1 | 3
2 | 2 | 4

我想在我的网页上显示左侧玩家图像和名称以及正确的玩家图像和名称。

SELECT m.left_players_id,p.name AS left_player,m.right_players_id,p.name AS right_player 来自球员p,对位m 在哪里m.left_players_id = p.id AND m.right_players_id = p.id

由于AND(需要匹配不存在),

0结果

SELECT m.left_players_id,p.name AS left_player,m.right_players_id,p.name AS right_player 来自球员p,对位m 在哪里m.left_players_id = p.id 或者m.right_players_id = p.id

4个结果(每行的欺骗)

我错过了什么?

3 个答案:

答案 0 :(得分:1)

您需要两次加入玩家表,每个玩家一次。

SELECT m.left_players_id, l.name AS left_player, m.right_players_id, r.name AS right_player 
FROM players r, payers l, matchups m 
WHERE m.left_players_id = l.id AND m.right_players_id = r.id

答案 1 :(得分:0)

由于您同时指的是两个不同的玩家,因此需要两次播放器表,并在Matchups表上加入以定义左右玩家之间的关系。

SELECT l.name, l.image_url, r.name, r.image_url 
FROM Players l 
INNER JOIN matchups m ON l.id=m.left_players_id
INNER JOIN Players r ON r.id=m.right_players_id

答案 2 :(得分:0)

您不应该从多个表中进行选择,您应该使用INNER JOIN,如下所示:

SELECT lp.name left_name, rp.name right_name
FROM matchups m
INNER JOIN players lp ON lp.id = m.left_players_id
INNER JOIN players rp ON rp.id = m.right_players_id;

那就行了。