我有表“words”:
id
name
insert into words values(null, 'one');
insert into words values(null, 'two');
insert into words values(null, 'three');
我需要清楚地找出整个 table 上使用的字母。 在这种情况下,结果将是:
o
n
e
t
w
h
r
我实际上不知道如何做到这一点。我发现一些存储过程似乎可以解决这个问题。对所有行进行某种迭代,将新字母添加到最终结果中。 有没有办法用纯 sql 命令来做到这一点?
最佳答案
您可以将 SUBSTRING
与派生统计表一起使用:
SELECT DISTINCT SUBSTRING(word, n, 1) AS letter
FROM words w
CROSS JOIN
(
SELECT a.N + b.N * 10 + c.N * 1000 + 1 n
FROM
(SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) a
,(SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) b
,(SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) c
) n
WHERE n <= LENGTH(w.word)
ORDER BY letter;
如果您需要 o
和 O
作为不同的字母,请添加 COLLATE utf8_bin
:
SELECT DISTINCT SUBSTRING(word, n, 1) COLLATE utf8_bin AS letter
关于MySQL 查询以获取跨行使用的所有不同字母,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35668336/