Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何仅从一列中选择不同的值_Mysql - Fatal编程技术网

Mysql 如何仅从一列中选择不同的值

Mysql 如何仅从一列中选择不同的值,mysql,Mysql,我有以下记录: key | name -------------- 1111 | aa 1111 | bb 2222 | cc 当键值不同时,我需要选择键和名称。当我尝试时: select distinct key, name from table; 我得到了所有的行,因为查询对以下列的组合采用了distinct:key和name。但是,我需要的只是不同的键,我不关心名称。我有很多记录,所以我需要一个实用的方法。查询: SELECT `key`, MAX(`name`) as

我有以下记录:

key  | name
--------------
1111 | aa   
1111 | bb    
2222 | cc
值不同时,我需要选择
名称
。当我尝试时:

select distinct key, name from table;
我得到了所有的行,因为查询对以下列的组合采用了distinct:
key
name
。但是,我需要的只是不同的
,我不关心
名称
。我有很多记录,所以我需要一个实用的方法。

查询:

SELECT `key`, MAX(`name`) as name
FROM `table`
GROUP BY `key`
这将为
的每个不同值返回一行,
名称
的值是从该组中的行中任意选择的。实际上,MySQL倾向于从组中第一个物理存储的行返回name的值,但这不能保证


正如其他答案所示,您可以将名称放入聚合表达式。

如果您不关心未分组字段,请尝试此查询-

select key, name from table group by key order by name
MySQL允许在不使用聚合函数的情况下选择字段

按名称排序有助于从组中选择名字。

为什么不只是:

SELECT distinct key
FROM table

这个怎么样:

select * from table group by key having count(key) = 1

我相信这是无效的SQL,尽管MySQL接受它并返回一些东西。此外,这个“某物”是具有相同键的名称集合中的随机名称,因此结果是不确定的(取决于表的删除和插入)。这是毫无意义的,也会在那些还没有掌握聚合概念的人中间造成误解。我不能说它是无效的。MySQL允许它,我们可以使用它。我同意随机记录;应该有聚合函数,或ORDERBY子句-这将有助于选择准确的值。我将编辑我的答案。根据ANSI/ISO SQL,它是无效的,因为它会导致不明确的结果。据我所知,MySQL和SQLite是唯一允许这种形式的RDBMS实现。其他RDBMS产品返回一个错误。
SELECT key, name
FROM table
GROUP BY key
select * from table group by key having count(key) = 1