'select distinct'是返回第一个不同的值还是最后一个不同?

时间:2013-09-03 10:01:12

标签: sql distinct

当我查询

select distinct Name from Emp;

Emp Table

ID   Name
1    Sam
2    Tom
3    Sam

此查询是否从重复名称或最后一个不同名称(ID = 3)返回第一个不同名称(ID = 1)

distinct关键字在此上下文中的实际效果如何?

2 个答案:

答案 0 :(得分:6)

我认为这里有一个误解: 您的查询会返回记录,只返回不同的列值。在您的示例中,“ Sam ”和“ Tom ”。

他们没有特别的顺序可以安全地预期。它可能是自然顺序,或者它们在数据库上处理的顺序(完全取决于数据库实现),或半随机(例如迭代集合中的项目)。订单也可能会有所不同,具体取决于是从数据还是从缓存中检索结果。

如果您需要特定订单,请将其指定为订单标准:

select distinct Name from Emp order by Name asc

如果您想要不同的值以及包含它的第一条记录,请使用group by

select min(ID), Name from Emp group by Name

答案 1 :(得分:1)

  

“选择不同的”返回第一个不同的值还是最后一个不同的值?

它可以通过以下方式显式添加排序语句来工作ORDER BY column_name DESC

  

distinct关键字在这种情况下实际上如何工作?

不同的工作原理是在指定的列名中找到第一类记录。 [{mysql] 此处的关键思想是首先对值进行排序,然后执行区分步骤。

示例

第一个不同的值

SELECT DISTINCT generated.Name,generated.ID FROM (SELECT Name,ID FROM Emp ORDER BY ID ASC) AS generated GROUP BY generated.Name

结果

+------+----+
| Name | ID |
+------+----+
| Sam  |  1 |
| Tom  |  2 |
+------+----+

最后一个不同的值

SELECT DISTINCT generated.Name,generated.ID FROM (SELECT Name,ID FROM Emp ORDER BY ID DESC) AS generated GROUP BY generated.Name

结果

+------+----+
| Name | ID |
+------+----+
| Sam  |  3 |
| Tom  |  2 |
+------+----+

同样,它可以以任何一种方式工作。