MySQL从查询SELECT DISTINCT中检索主键

时间:2017-09-20 18:05:07

标签: mysql

我有一个简单的问题。我有以下mysql查询:

SELECT DISTINCT name FROM nametable WHERE status = 0 ORDER BY id ASC

这将为我提供一个包含所有不同名称的表格,从最低的id编号开始。我想逐个处理这些名称,并且需要检索与名称关联的id,但是,查询只返回不同的名称,如何获取与名称关联的id。当我在查询中添加id时,如下所示:

SELECT DISTINCT id, name FROM nametable WHERE status = 0 ORDER BY id ASC

当然,它会给我所有不同的id,它会给我重复的名字,这是我不想要的。

更新

所以我刚刚进行了查询,结果如下所示。是,有办法获得每个ID的第一个数字吗?我还注意到groupconcat的ID不是ASC顺序,我需要从最低开始获取第一个ID。

 ----------------------------
| name   | Group_Concat(ID)  |   
----------------------------
| name1  | 1,2,3,4           | //1
----------------------------- 
| name2  | 22,20             | //20
-----------------------------
| name3  | 12                | //12
-----------------------------
| name4  | 45, 41            | //41
----------------------------
| name5  | 55, 51, 52       |  //51
----------------------------

已解决以下问题:

SELECT id, name FROM nametable WHERE status = 0 GROUP BY name ORDER BY id ASC

2 个答案:

答案 0 :(得分:2)

你可能需要像

这样的东西
SELECT name,
         GROUP_CONCAT(id)
       FROM table
       GROUP BY name;

源是MySQL documentation:

  

在MySQL中,您可以获取表达式的连接值   组合。要消除重复值,请使用DISTINCT子句。   要对结果中的值进行排序,请使用ORDER BY子句。排序   反向顺序,将DESC(降序)关键字添加到名称中   您在ORDER BY子句中排序的列。默认是   升序;这可以使用ASC明确指定   关键词。组中值之间的默认分隔符是逗号(,)。   要明确指定分隔符,请使用SEPARATOR,然后使用   应在组值之间插入的字符串文字值。至   完全取消分隔符,指定SEPARATOR''。

我看到你更新了这个问题,所以根据我的理解,你总是需要最低的身份。

然后你需要使用MIN()功能。 这看起来像是这样的:

SELECT name,
             MIN(id)
           FROM table
           GROUP BY name;

答案 1 :(得分:1)

这应该是你要找的东西:

SELECT MIN(id), name
    , GROUP_CONCAT(DISTINCT id ORDER BY id) AS idList -- If you need them
FROM nametable
WHERE status = 0
GROUP BY name
ORDER BY MIN(id);