psql表查询

时间:2015-04-27 20:47:51

标签: mysql sql psql

我有3桌,球员,比赛,胜利。我想做一个查询,检索玩家ID,名字,他参加的比赛数量以及获得的胜利数量。

匹配表跟踪它所在的回合,参与的玩家(p_one_id和p_two_id),而wins表跟踪匹配ID,看看他赢了谁,以及玩家ID。

如果我这样做

SELECT players.id, players.name, COUNT(matches.*) as matches FROM players, matches WERE matches.p_one_id = players.id GROUP BY players.id

它工作正常,至少从我的基本测试开始(但是也没有检查胜利)但是如果我这样做

SELECT players.id, players.name, COUNT(matches.*) as matches, COUNT(wins.*) AS wins FROM players, matches, wins WERE matches.p_one_id = players.id AND wins.p_id = players.id GROUP BY players.id

我什么都没得到,一个原因是没有胜利,但是我只得到那些赢了的人,我也不能做一个子查询,因为我不能在子查询中使用玩家ID,在至少不是我的知识)。任何人都知道我的结果需要什么查询?

2 个答案:

答案 0 :(得分:1)

用户外部联接。您正在使用的连接语法是消除玩家,除非他们同时拥有胜利和匹配。

SELECT players.id, players.name, 
       COUNT(matches.p_one_id) as matches, 
       COUNT(wins.p_id) AS wins 
FROM players
LEFT JOIN matches
 on matches.p_one_id = players.id 
LEFT JOIN wins 
 on wins.p_id = players.id 
GROUP BY players.i, players.name

这将返回所有玩家,比赛和胜利。

答案 1 :(得分:1)

我建议使用LEFT JOIN而不是cross join / where子句选项。您可能还希望计算玩家所在的比赛"玩家2"。有点像:

{{1}}