MySQL select distinct不起作用
我有一个数据库,其中有一个表,表中有以下行:MySQL select distinct不起作用,mysql,Mysql,我有一个数据库,其中有一个表,表中有以下行: id name date ----------------------- 1 Mike 2012-04-21 2 Mike 2012-04-25 3 Jack 2012-03-21 4 Jack 2012-02-12 我只想提取不同的值,这样我只能得到Mike和Jack一次。 我有以下搜索脚本代码: SELECT DISTINCT name FROM
id name date
-----------------------
1 Mike 2012-04-21
2 Mike 2012-04-25
3 Jack 2012-03-21
4 Jack 2012-02-12
我只想提取不同的值,这样我只能得到Mike和Jack一次。
我有以下搜索脚本代码:
SELECT DISTINCT name FROM table WHERE name LIKE '%$string%' ORDER BY id DESC
但它不起作用。它输出迈克,迈克,杰克,杰克
为什么?由于ORDER BY id DESC子句,查询被视为是编写的:
SELECT DISTINCT name, id
FROM table
ORDER BY id DESC;
但id列不会返回给您所访问的用户。结果集必须包含id才能按其排序。显然,这个结果集有四行,所以这就是返回的结果。寓意:不要按隐藏列排序——除非你知道它将对你的查询做什么
尝试:
根据突发奇想有或没有描述。这将只返回两行
如果您需要知道每个名称的id,请考虑:
SELECT name, MIN(id)
FROM table
GROUP BY name
ORDER BY MIN(id) DESC;
你可以用MAX来达到同样好的效果
所有这些都适用于所有SQL数据库,包括MySQL。MySQL有一些规则,允许您省略具有某种不确定性结果的GROUPBY子句。我建议不要利用这个特性
很长一段时间以来,甚至现在,SQL标准也不允许您按不在选择列表中的列排序,这正是为了避免这样的混淆。当结果集不包含排序数据时,结果集的排序称为“基本排序”;如果排序列都出现在结果集中,则这是“不必要的排序”,因为您有足够的数据自己对数据进行排序。由于order BY id DESC子句,查询被视为是编写的:
SELECT DISTINCT name, id
FROM table
ORDER BY id DESC;
但id列不会返回给您所访问的用户。结果集必须包含id才能按其排序。显然,这个结果集有四行,所以这就是返回的结果。寓意:不要按隐藏列排序——除非你知道它将对你的查询做什么
尝试:
根据突发奇想有或没有描述。这将只返回两行
如果您需要知道每个名称的id,请考虑:
SELECT name, MIN(id)
FROM table
GROUP BY name
ORDER BY MIN(id) DESC;
你可以用MAX来达到同样好的效果
所有这些都适用于所有SQL数据库,包括MySQL。MySQL有一些规则,允许您省略具有某种不确定性结果的GROUPBY子句。我建议不要利用这个特性
很长一段时间以来,甚至现在,SQL标准也不允许您按不在选择列表中的列排序,这正是为了避免这样的混淆。当结果集不包含排序数据时,结果集的排序称为“基本排序”;如果排序列都出现在结果集中,则这是“不必要的排序”,因为您有足够的数据自己对数据进行排序。它不选择distinct,它输出所有的名称,甚至是重复的。如果您的输出是唯一的名称,那么为什么要使用ORDER By id。除此之外,您正在使用的SQL看起来与您所要求的是正确的。请尝试以下操作:从表中选择不同的名称,其中的名称(如“%$string%”)按名称描述排序。不同的日期值可能会导致此问题。如果要查找名称列表,请删除WHERE子句。i、 e:按名称描述从表顺序中选择不同的名称,或者如果您只希望列表按升序排列:从中选择不同的名称table@Linger,对此我不知道任何可能的解释,除了给出一个奇怪的答案:Pit不选择distinct,它输出所有的名称,甚至是重复的。如果您的输出是唯一的名称,那么为什么要使用ORDER By id。除此之外,您正在使用的SQL看起来与您所要求的是正确的。请尝试以下操作:从表中选择不同的名称,其中的名称(如“%$string%”)按名称描述排序。不同的日期值可能会导致此问题。如果要查找名称列表,请删除WHERE子句。i、 e:按名称描述从表顺序中选择不同的名称,或者如果您只希望列表按升序排列:从中选择不同的名称table@Linger,对此我不知道任何可能的解释,除了给出一个奇怪的答案:P