MySQL 不使用 UNION 从每个字母返回 1 行?

标签 mysql

我想为字母表中的每个字母返回 1 行。例如,下表从名称 a 到 z。在生产数据库中,我有 1000 个名字。

id| name
1 | amy
2 | anna
3 | barry
4 | blake
5 | baron
6 | charles

我想要一个查询为每个字母返回 1 行。我知道如何使用 UNION 完成此操作,但如何在没有 UNION 的情况下在单个查询中完成此操作?

SELECT * FROM `table` WHERE name LIKE 'a%' LIMIT 1
UNION
SELECT * FROM `table` WHERE name LIKE 'b%' LIMIT 1
UNION
SELECT * FROM `table` WHERE name LIKE 'c%' LIMIT 1
UNION
SELECT * FROM `table` WHERE name LIKE 'd%' LIMIT 1

我期待返回的结果:

[0]=>amy
[1]=>barry
[2]=>charles

最佳答案

您需要按第一个字符分组。

SELECT name
FROM names
GROUP BY SUBSTRING(name, 1, 1);

参见 DEMO

关于MySQL 不使用 UNION 从每个字母返回 1 行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48490887/

相关文章:

php - foreach 循环没有得到下一个结果

mysql - Drupal 7 - EntityFieldQuery - 与 mysql FIELD(...) 一起使用进行自定义订单

php - joomla-php mysql 未使用先前查询的数据更新记录

PHP in_array() 函数并非在所有情况下都有效

php - 在 MySQL 数据库中高效备份(尤其是撤消 UPDATE 操作)的最简单方法是什么?

mysql - 尝试编写一个存储函数以在 mysql UPDATE SET 语句中使用

php - MySQL 性能 - "IN"子句与单个值的等于 (=)

mysql - 寻找成员(member) 初级商店

Mysql 更新日期时间语句

mysql - 编译 facebook/mysql 时出现 CMake 错误,链接到奇怪的路径