在MySQL中过滤掉具有/相同标题的字段时,无法使用DISTINCT

时间:2011-03-01 03:30:08

标签: mysql distinct

 SELECT america, 
       america_un, 
       game, 
       genre, 
       id, 
       platform, 
       url 
FROM   `main-games` 
ORDER  BY tally_rank 
LIMIT  3 

基本上我的问题是我有时会有两个游戏(不同的数据,只是同一个名字),这些游戏的tally_rank-s彼此相互关联,给我一些重复。基本上我想要做的是让游戏专栏与众不同,所以除了我遇到的第一个游戏外,它忽略了任何其他同名游戏。

所以如果我有“game1,game2,game2,game3”,我会想要第一个游戏2并且会忽略第二个游戏。

不知道如何做到这一点,因为从我记忆中来看,DISTINCT在MySQL中是全有或全无。

编辑:我应该注意到我已经使用了GROUP BY游戏,但由于某种原因,它会跳过其他所有记录(2,4等)。

编辑2:以下是数据库中tally_rank的正确顺序:

Knight's Contract
Fight Night Champion
The Legend of Heroes: Trails in the Sky
PopCap Hits!
Killzone 3

将会发生的情况是查询将获得1/3/5,如果我删除“GROUP BY游戏”,它将获得1/2/3。不太确定为什么“GROUP BY游戏”正在跳过记录。

3 个答案:

答案 0 :(得分:0)

没有DISTINCT:

 SELECT field1,field2,field3,game FROM `main-games` GROUP BY game LIMIT 3;

WITH DISTINCT:

 SELECT DISTINCT(game),field1,field2 FROM `main-games` ORDER BY tally_rank LIMIT 3;

答案 1 :(得分:0)

尝试GROUP BY一个字段时,但在“分组之前”应用一些排序(意思是 - 按游戏分组,但从每组相同的游戏中获取第一个游戏) ,我认为你可以使用内部选择:

SELECT m.america,
       m.america_un,
       m.game,
       m.genre,
       m.id,
       m.platform,
       m.url
FROM `main-games` m
JOIN (SELECT game,
       min(id) AS id
       FROM `main-games`
       ORDER BY tally_rank
       GROUP BY game) as t
ON m.game = t.game AND m.id = t.id
ORDER BY m.tally_rank
LIMIT 3

内表有每个游戏的游戏名称和最小ID - 它告诉哪一个是每个组中的第一个游戏。外部选择使用此ID来查找此特定游戏记录并为其获取其余数据。

答案 2 :(得分:0)

如果你不能使用Distinct或Group BY,可以试试这个:

SELECT america,         
america_un,         
game,         
genre,         
id,         
platform,         
url  
FROM   `main-games` M1 LEFT JOIN `main-games` M2 
ON (M1.game = M2.game AND M1.id > M2.id)
WHERE M2.id IS NULL
ORDER  BY tally_rank  LIMIT  3