MySQL不使用UNION从每个字母返回1行?
我想为字母表中的每个字母返回1行。例如,下表从名称a到z。在生产数据库中,我有1000个名称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
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
功能稍微快一点。