当我查询
select distinct Name from Emp;
Emp Table
ID Name 1 Sam 2 Tom 3 Sam
此查询是否从重复的名称或最后一个不同的名称(ID = 3)返回第一个不同的名称(ID = 1)
distinct关键字在这种情况下实际上如何工作?
我认为这里有一个误解:你的查询确实 not 返回记录,只返回不同的列值 . 在你的例子中,这是'Sam ' and ' Tom' .
它们没有可以安全预期的特定顺序 . 它可能是自然顺序,或它们在数据库上处理的顺序(完全取决于数据库实现),或半随机(例如迭代集合中的项目) . 订单也可能根据结果是从数据还是从缓存中检索而变化 .
如果您需要特定订单,请将其指定为订单标准:
select distinct Name from Emp order by Name asc
If you want the distinct values and the first record containing it, use group by:
select min(ID), Name from Emp group by Name
'select distinct'是返回第一个不同的值还是最后一个不同?
It can work either way 通过显式添加排序语句,如下所示: ORDER BY column_name DESC
ORDER BY column_name DESC
distinct关键字在这种情况下实际如何工作?
通过查找指定列名称中的 first kinds 条记录来实现区分 . [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 | +------+----+
同样,它可以以任何方式工作 .
2 回答
我认为这里有一个误解:你的查询确实 not 返回记录,只返回不同的列值 . 在你的例子中,这是'Sam ' and ' Tom' .
它们没有可以安全预期的特定顺序 . 它可能是自然顺序,或它们在数据库上处理的顺序(完全取决于数据库实现),或半随机(例如迭代集合中的项目) . 订单也可能根据结果是从数据还是从缓存中检索而变化 .
如果您需要特定订单,请将其指定为订单标准:
If you want the distinct values and the first record containing it, use group by:
It can work either way 通过显式添加排序语句,如下所示:
ORDER BY column_name DESC
通过查找指定列名称中的 first kinds 条记录来实现区分 . [mysql]这里的关键思想是先对值进行排序,然后进行区分步骤 .
例子
第一个不同的 Value
结果
最后一个明显的 Value
结果
同样,它可以以任何方式工作 .