双左连接在sql?

时间:2017-08-24 22:21:43

标签: sql

我正在重新访问SQL,因为我开始了一个新项目。

我有3个表(仅显示有用的字段):

播放器: ID

细粒 player_id,很好

Finelist ID,价格

我想让每位球员获得罚款。我正在努力为每件罚款增加价格。

SELECT p.id, COUNT(f.player_id) FROM PLAYERS p LEFT JOIN FINES f ON (p.id=f.player_id) GROUP BY p.id

为每位玩家返还适量的罚款。现在我有不同的罚款和不同的价格。现在我想添加它们。我试过这样:

SELECT p.id, COUNT(f.player_id) * fl.price FROM PLAYERS p LEFT JOIN FINES f ON (p.id=f.player_id), FINELIST fl WHERE fl.id = f.fine GROUP BY p.id

现在只考虑FINELIST的第一行。只有带有fine = 1的FINES中的行才会添加到COUNT。

我不确定在一个查询中我是否可以尝试做什么,并希望得到一些帮助。

2 个答案:

答案 0 :(得分:2)

您也希望与FINELIST进行左联接。应该是这样的:

SELECT
  p.id,
  COUNT(*) as fine_count,
  SUM(COALESCE(fl.price,0)) as total_fine
FROM PLAYERS p 
LEFT JOIN FINES f ON p.id=f.player_id
LEFT JOIN FINELIST fl ON fl.id = f.fine
GROUP BY p.id
  

我把coalesce放在那里因为在某些使用空值SUM()的系统上会发出警告或错误。

答案 1 :(得分:1)

SELECT p.id, SUM(fl.price) FROM PLAYERS p LEFT JOIN FINES f ON (p.id=f.player_id), FINELIST fl WHERE fl.id = f.fine GROUP BY p.id

诀窍。