2015-11-01 51 views
1

我有一個查詢:該查詢是可靠的嗎? (多JOIN在SQL)

SELECT matches.id, 
matches.player1, 
matches.player2, 
users.firstname as firstname, 
tournaments.tid as tid, 
users.tempsalt as salt 
FROM matches 
INNER JOIN tournaments 
ON matches.tid = tournaments.tid 
INNER JOIN users 
ON matches.uid = users.uid 
WHERE ((matches.status = 0) 
OR (matches.status = 1)) 
AND (tournaments.status <> 3) 
AND (users.tempsalt = '324234324234') 

三個表 - 比賽比賽用戶

  • 比賽(ID,TID,UID, player1,player2,status)
  • users(id,uid,firstname, tempsalt)
  • 比賽(ID,TID,狀態)

加了: 火柴[1,3,2,約翰,馬克,0] [2,3,NULL,Piter酒店,薩拉,1]

用戶[1,3,亞歷克斯,346] [2,4,山姆,32423]

比賽[1,3,2] 我想獲得的結果: [1 ,約翰,馬克,山姆,3,32423]和NULL t oo [2,Piter,Sara,NULL,3,NULL]

如果matches.uid爲NULL,則不會有結果。但是我想在match.uid也是NULL時得到結果。在一個SQL查詢中可以嗎?

+0

編輯你的問題,並提供樣本數據和預期的結果。 –

+0

好的,等一下。 – Puristaako

+0

使用'left join'而不是'inner join' –

回答

2

使用left join,並把連接表的條件on子句中

SELECT m.id, m.player1, m.player2, 
     u.firstname as firstname, u.tempsalt as salt, 
     t.tid as tid 
FROM matches m 
LEFT JOIN tournaments t ON m.tid = t.tid 
         AND t.status <> 3 
LEFT JOIN users u ON m.uid = u.uid 
       AND u.tempsalt = '324234324234' 
WHERE m.status in (0,1) 
+0

非常感謝!你拯救了我的一天 – Puristaako