2017-09-04 45 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

謝謝!這個伎倆。你能解釋爲什麼這有效嗎? –