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

MySQL不使用UNION从每个字母返回1行?,mysql,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 `ta

我想为字母表中的每个字母返回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);

请参见

您需要按第一个字符分组

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

参见

你可以做一个聚合和分组,也许可以

select * from
(
select max(id) as maxid, substring(name,1,1) as first letter from tablename
group by substring(name,1,1)
) t1
join tablename t on t.id = t1.maxid

你也许可以做一个聚合和分组

select * from
(
select max(id) as maxid, substring(name,1,1) as first letter from tablename
group by substring(name,1,1)
) t1
join tablename t on t.id = t1.maxid

为什么barry和baron不匹配?如果存在匹配,我只希望返回一行。为什么barry和baron不匹配?如果存在匹配,我只希望返回一行。我更喜欢您的解决方案,因为您考虑了名称的第一次出现。另外,
LEFT
函数的速度稍快。我更喜欢您的解决方案,因为您考虑了名称的第一次出现。另外,
LEFT
功能稍微快一点。