MySQL:如何 select 与 table 不同的值?
MySQL: How to select distinct values from a table?
我有很多行和列的巨大 table,但我只会描述其中重要的部分:
+-----------+------------------+------+-----+---------+----------------+
| 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
.
我想select这些行(GROUP BY artikel
),其中没有唯一的name
,而是HAVING COUNT(name) > 1
。所以我的 select 将 return 一行,其中 artikel
= 2000
.
我尝试了 HAVING
、DISTINCT
,但没有成功。
怎么做到的?
使用group by
和having
:
select artikel
from exampledata
group by artikel
having min(name) <> max(name);
您还可以在 having
子句中使用 count(distinct)
。但是 count(distinct)
通常需要比仅比较最小值和最大值更多的工作。
我有很多行和列的巨大 table,但我只会描述其中重要的部分:
+-----------+------------------+------+-----+---------+----------------+
| 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
.
我想select这些行(GROUP BY artikel
),其中没有唯一的name
,而是HAVING COUNT(name) > 1
。所以我的 select 将 return 一行,其中 artikel
= 2000
.
我尝试了 HAVING
、DISTINCT
,但没有成功。
怎么做到的?
使用group by
和having
:
select artikel
from exampledata
group by artikel
having min(name) <> max(name);
您还可以在 having
子句中使用 count(distinct)
。但是 count(distinct)
通常需要比仅比较最小值和最大值更多的工作。