2011-12-29 43 views
1

似乎就像MySQL 5.5 SELECT DISTINCT只需一列即可正常工作。MySQL 5.5 SELECT DISTINCT - 如何返回多个列而没有查询重复?

SELECT DISTINCT type FROM table 
WHERE type LIKE 'h%' 
LIMIT 5; 

回报良好的效果:

type 
-------- 
htm 
html 
htaccess 

但在试图SELECT两列或多列

SELECT DISTINCT id, type FROM table 
WHERE type LIKE 'h%' 
LIMIT 5; 

返回与查询重复失败的结果:

id | type 
---+-------- 
1 | htm 
3 | htm 
5 | html 
6 | html 
7 | html 

预期结果:

id | type 
---+-------- 
3 | htm 
7 | html 
5 | htaccess 

id没有必要申请DISTINCT,因为它有AUTO_INCREMENT

+2

好吧,行1 htm和3-htm是不同的,不是吗? – 2011-12-29 21:48:33

回答

5

你想要一个group by

select 
    max(id) as id, 
    type 
from 
    table 
where type like 'h%' 
group by type 

distinct让你distinct行 - 这意味着,除非列每值相同的行已经在结果集,它我会显示那一行。在这种情况下,它的行为与上述完全相同。

做一个group by和使用聚合函数(如max),你指定你想成为独特的,而您汇总其他列的列给你提供你正在寻找的结果集。

+0

不需要'MAX(id)AS id'或'MIN(id)AS id',它可能被替换为'id'。 'LIMIT 5;'的SQL比'DISTINCT'要慢10倍。任何表演?其他方式工作正常。 – Binyamin 2011-12-29 22:06:13

+1

MySQL在'group by'糟糕,抱歉,但确实如此。你可以使用'distinct',但它不是你想要的,而且你没有理解'distinct'和'group by'之间的区别。而且,不显示聚合的选择性“group by”仅限于MySQL - 我给出的语法是ANSI,并且是获取您想要执行的操作的正确查询。我的感觉是你的问题没有明确定义 - 你究竟想要做什么? – Eric 2011-12-30 03:20:23

2
SELECT 
    min(id) as id, 
    type 
FROM table 
WHERE type LIKE 'h%' 
GROUP BY type 
LIMIT 5; 
0

首先,对于澄清:

SELECT DISTINCT id, type FROM table 
WHERE type LIKE 'h%' 
LIMIT 5; 

该查询按预期工作,因为ID是一个auto_increment,没有愚弄,所以不同的是没有意义的。

二,你想完成什么?无论您在类型列上执行DISTINCT还是GROUP BY,即使表中的多行共享相同的值(每个ID都具有不同的ID),您也将获得仅表示表中一行的ID。

1

它们不是重复的行。不同意味着每个列值的组合对于其他所有组合都不相同。正如你所看到的,1 | htm和3 | htm是不一样的,然后是不同的。

+0

不重复的行,但**查询**。 – Binyamin 2011-12-29 21:55:54

0

MySQL 5.5

SELECT DISTINCT - 如何返回一列没有查询重复?

如果你有一个雇员表所示:

Eno Ename Location 

当你有一个以上的位置,为员工,并希望看到不同的位置:

SELECT DISTINCT 
    Eno,Ename,(Location) 
FROM 
    Employee