使用 DISTINCT
DISTINCT 允许您从结果集中删除重复的行。它是这样使用的:
SELECT DISTINCT *
FROM tablename
请注意,DISTINCT 适用于结果集中所有返回的列。因此,如果您要返回多个字段,并且要将其应用于特定字段,DISTINCT 将不是答案。
例如,给定以下数据集:
user_id whatever
----------------------
1 this
1 that
2 this
2 this
以下查询:
SELECT DISTINCT user_id, whatever
FROM tablename
返回:
1 this
1 that
2 this
它只删除了重复的 2, this 行,因为考虑到这两列,那是唯一的重复。
但是,如果我选择这样的单个列:
SELECT DISTINCT user_id
FROM tablename
我会得到以下期望的结果:
1
2
使用 GROUP BY
因此,如果您选择多列但只希望其中一列不同,您可以像这样使用GROUP BY:
SELECT DISTINCT user_id, whatever
FROM tablename
GROUP BY user_id
这给出了以下结果,每个不同的 user_id 只返回一行:
1 this
2 this
不过,这些结果也可能是一样的:
1 that
2 this
非分组列的值将是任意的。事实上,MySQL 4.x 甚至不会接受上面的GROUP BY 查询。 MySQL 4.x 不允许您混合聚合(分组)和非聚合列。因此,最好使用以下查询:
SELECT DISTINCT user_id, MAX(whatever)
FROM tablename
GROUP BY user_id
现在,第二列的结果不是任意的:
1 this
2 this