我有很多行和列的大表,但我只会描述其中的重要内容:
+-----------+------------------+------+-----+---------+----------------+
| 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
。
我尝试了HAVING
,DISTINCT
,但没有成功。
怎么办呢?
答案 0 :(得分:3)
使用group by
和having
:
select artikel
from exampledata
group by artikel
having min(name) <> max(name);
您还可以在count(distinct)
子句中使用having
。但count(distinct)
通常需要的工作量不仅仅是比较最小值和最大值。