SQL:限制一个表的结果

时间:2017-12-05 08:24:23

标签: mysql sql distinct limit

我有一个简单的查询:

SELECT 
    c.nom AS race_name, 
    r.nom_coureur AS player_name, 
    r.prenom_coureur AS player_name_first
FROM pourvelobsx.calendrier AS c    
INNER JOIN pourvelobsx.resultat_autre AS r 
    ON r.identifiant_epreuve = c.identifiant
WHERE nom_etape = "final"
ORDER BY c.id DESC
LIMIT 5

查询返回5行:

+------------------+-------------+-------------------+
| race_name        | player_name | player_name_first |
+------------------+-------------+-------------------+
| Watashi wa Alex  | BARBAS      | Yoann             |
| Watashi wa Alex  | AHLSTRAND   | Jonas             |
| Watashi wa Alex  | ACEVEDO     | Janier Alexis     |
| Tour de La Baule | CHAVANEL    | Sylvain           |
| Tour de La Baule | SANCHEZ     | Samuel            |
+------------------+-------------+-------------------+

我想知道,我如何限制比赛结果(" calendrier"表格)而不是全局行结果?

像这样:

+------------------+-------------+-------------------+
| race_name        | player_name | player_name_first |
+------------------+-------------+-------------------+
| Watashi wa Alex  | BARBAS      | Yoann             |
| Watashi wa Alex  | AHLSTRAND   | Jonas             |
| Watashi wa Alex  | ACEVEDO     | Janier Alexis     |
| Tour de La Baule | CHAVANEL    | Sylvain           |
| Tour de La Baule | SANCHEZ     | Samuel            |
| Tour de La Groin | HELLO       | Calvin            |
| Tour de La Groin | ESTEBEZ     | Millo             |
| Tour de France   | SANCHEZ     | Samuel            |
| Tour de France   | SICKED      | Alex              |
| Tour d'Espagne   | VILLIOD     | Fred              |
| Tour d'Espagne   | CRACHER     | Jordan            |
| Tour d'Espagne   | ELBANTI     | Maxime            |
| Tour d'Espagne   | BOKEDRON    | Yohan             |
+------------------+-------------+-------------------+

所以我只有5场比赛没有限制排。我尝试了DISTINCT但未成功。

1 个答案:

答案 0 :(得分:1)

我相信你想要这样的东西

SELECT 
  c.nom AS race_name, 
  r.nom_coureur AS player_name, 
  r.prenom_coureur AS player_name_first
FROM pourvelobsx.calendrier AS c    
INNER JOIN pourvelobsx.resultat_autre AS r ON r.identifiant_epreuve = c.identifiant
INNER JOIN
(
  SELECT c.nom
  FROM pourvelobsx.calendrier AS c   
  INNER JOIN pourvelobsx.resultat_autre AS r ON r.identifiant_epreuve = c.identifiant     
  WHERE nom_etape = "final"
  GROUP BY c.nom
  ORDER BY c.id DESC
  LIMIT 5
) t ON t.nom = c.nom
WHERE nom_etape = "final"