用MySQL查询所有列并去重ID。

34

我正在尝试选择一个带有唯一标识符的行,但要返回所有字段。

SELECT * DISTINCT(ID) FROM table WHERE ...

我最终需要ID、城市、州和邮政编码。如何获取非重复ID的行并将所有字段返回到mysql_fetch_array中?

我已尝试以下方法:

SELECT * DISTINCT(ID) FROM table WHERE ...

SELECT DISTINCT ID * FROM table WHERE ...

SELECT ID,City,State,Zip DISTINCT ID FROM ...

SELECT ID,City,State,Zip DISTINCT(ID) FROM ...

我在这里阅读了其他问题,但似乎没有帮助。提前感谢!


“DISTINCT” 会从表中返回唯一的 ID;你到底想做什么? - Burhan Khalid
1
我需要的不仅仅是ID... 不过还是谢谢。 - NotJay
1
那么对于相同的ID,应该选择哪条记录? - xdazz
5
如果有多个记录使用相同的“ID”但拥有不同的地址...你希望选择哪一个地址?是随机选择吗? - poncha
我想选择4个带不同ID的行,我将使用城市、州和邮政编码。我需要确保忽略重复的ID,因为我正在对返回的数据进行排序。至于拥有不同地址的ID,显示哪个地址并不重要,我只是不想有重复项。谢谢您的帮助,问题已解决。 - NotJay
1个回答

51

尝试使用GROUP BY

  select id, city, state, zip
    from mytable
group by id
请注意,如果存在重复的id,则此操作将为每个id返回一个任意地址。
示例: http://www.sqlfiddle.com/#!2/c0eba/1

我应该在WHERE之前还是之后添加GROUP BY? - NotJay
6
@NotJay - group by应该放在where之后。 - Eric Petroelje
12
让我指出,这是GROUP BY的一种非典型用法。其主要目的是进行聚合,即按组查找最小值、最大值、总和或其他汇总值。例如,您可以使用GROUP BY将销售数据按月份组合起来生成月度总额和平均值。我正在利用mysql允许您在查询中引用未分组的列的事实,这在大多数其他数据库系统中是未定义行为(不允许的)。干杯! - mellamokb
@mellamokb:说得好,你应该把它加到答案中,而不是留在评论里! - nico
它总是返回我所有的字段,使用相同的查询...有什么办法可以解决这个问题吗? - jpganz18

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接