2017-09-04 46 views
0

我有3个表的SQLite有多个匹配

PLAY 
_id INTEGER 
time INTEGER 

SCORE 
_id INTEGER 
player_id INTEGER 
play_id INTEGER 
civilian INTEGER 
scientific INTEGER 
commercial INTEGER 
military INTEGER 
guilds INTEGER 
treasury INTEGER 
wonders INTEGER 
progress INTEGER 
total INTEGER 
supremacy INTEGER 
victory INTEGER 

PLAYER 
_id INTEGER 
first_name INTEGER 
last_name INTEGER 

为每PLAY SCORE的链接,并以每加盟SCORE one PLAYER已链接。

我想SELECTPLAY与第一和第二SCORE链接到每个PLAYPLAYER的名字。我认为这将是可能的使用JOIN声明,但由于我不是SQL专家,我不知道如何做到这一点。甚至可以用我的桌子?

编辑:
我想答案从胡安·卡洛斯·Oropeza具有一些修改的SELECT声明

SELECT p._id, p.time, p1.first_name, p2.first_name 
FROM play p 
    JOIN score s1 
    ON p._id = s1.play_id 
    JOIN score s2 
    ON p._id = s2.play_id 
     AND s1.player_id <> s2.player_id 
    JOIN player p1 
    ON s1.player_id = p1._id 
    JOIN player p2 
    ON s2.player_id = p2._id 

我得到这个结果,_id列包含PLAY ID的

_id time   first_name last_name 
1 1504107269335 Jelmer  Amarinske 
1 1504107269335 Amarinske Jelmer 
2 1504529628826 Jelmer  Amarinske 
2 1504529628826 Amarinske Jelmer 
3 1504529644821 Jelmer  Amarinske 
3 1504529644821 Amarinske Jelmer 

这是近乎完美。现在我想每场比赛只有一排。

编辑:

我加的建议由胡安·卡洛斯·Oropeza。现在我有了预期的结果。

1 1504107269335 Jelmer Amarinske 
2 1504529628826 Jelmer Amarinske 
3 1504529644821 Jelmer Amarinske 
+2

您能请张贴一些样品数据和预期的结果。这对我们来说很有帮助。 –

+0

我想你应该显示一些相同的数据以及预期的输出。 –

回答

0

你必须加入两次对得分表。然后加入与球员的每个得分得到名字

SELECT p._id, p.time, p1.first_name, p2.first_name 
FROM play p 
JOIN score s1 
    ON p._id = s1.play_id 
JOIN score s2 
    ON p._id = s2.play_id 
    AND s1.player_id < s2.player_id 
JOIN player p1 
    ON s1.player_id = p1._id 
JOIN player p2 
    ON s2.player_id = p2._id 
+0

谢谢你的帮助!你太棒了!我快到了。结果是每次播放都会得到两行。第二行有玩家名称切换。每场比赛我只需要一排。我可以理解为什么有两行会被返回,但是让我困惑的是为什么这些名字第二次被切换。 –

+0

将'<>'更改为's1.player_id

+0

谢谢!这个伎俩。你能解释为什么这有效吗? –