MySQL:如何从表中选择不同的值?

时间:2015-03-25 10:38:26

标签: mysql distinct

我有很多行和列的大表,但我只会描述其中的重要内容:

+-----------+------------------+------+-----+---------+----------------+
| Field     | Type             | Null | Key | Default | Extra          |
+-----------+------------------+------+-----+---------+----------------+
| id        | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
| name      | varchar(255)     | NO   |     | NULL    |                |
| artikel   | int(10) unsigned | NO   | IDX | NULL    |                |
| color     | varchar(255)     | NO   |     | NULL    |                |
+-----------+------------------+------+-----+---------+----------------+

示例数据:

 1    apple        1000      red
 2    apple        1000      yellow
 3    lemon        2000      blue
 4    lem on       2000      green
 5    lemon        2000      black
 6    apple        1000      white
 7    cherry       3000      lime
 8    cherry       3000      pink
 9    lemon        2000      silver
10    apple        1000      gold

正如您所看到的,索引位于artikel,每个artikel都有一些name(每个artikel都有相同的name)和不同的color。一切都很好,但行4有问题,错误name = lem on,应该是lemon

我想选择这些行(GROUP BY artikel),其中没有唯一的name,而是HAVING COUNT(name) > 1。因此,我的选择将返回一行,其中artikel = 2000

我尝试了HAVINGDISTINCT,但没有成功。

怎么办呢?

1 个答案:

答案 0 :(得分:3)

使用group byhaving

select artikel
from exampledata
group by artikel
having min(name) <> max(name);

您还可以在count(distinct)子句中使用having。但count(distinct)通常需要的工作量不仅仅是比较最小值和最大值。